/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
splitte long til bytes
Fra : Troels Thomsen


Dato : 09-05-03 11:08


Hej

Hvis value er &hAABBCCDD, hvordan får jeg så nemmest pillet de 4 bytes ud ?
(Jeg dividerer fordi jeg ikke kan finde en shift operator i vb. Kan det
virkeligt passe ?)

mit første forsøg var:

val = &HAABBCCDD
val = val \ 2 ^ 24 ' b is aa
b = val ' overflow fordi val er -86,
t.data = Chr(b) ' add to string
val = val - (b * s ^ 24) ' val is now bbccdd

b = val \ 2 ^ 16 ' b is bb
t.data = t.data & Chr(b) ' add to string
val = val - (b * s ^ 16) ' val is now ccdd

etc

mvh Troels



 
 
Helge Bjørkhaug (09-05-2003)
Kommentar
Fra : Helge Bjørkhaug


Dato : 09-05-03 19:48

On Fri, 9 May 2003 12:07:44 +0200, "Troels Thomsen"
<troels.thomsen@mailteledk> wrote:

>
>Hej
>
>Hvis value er &hAABBCCDD, hvordan får jeg så nemmest pillet de 4 bytes ud ?
>(Jeg dividerer fordi jeg ikke kan finde en shift operator i vb. Kan det
>virkeligt passe ?)
>
>mit første forsøg var:
>
> val = &HAABBCCDD
> val = val \ 2 ^ 24 ' b is aa
> b = val ' overflow fordi val er -86,
> t.data = Chr(b) ' add to string
> val = val - (b * s ^ 24) ' val is now bbccdd
>
> b = val \ 2 ^ 16 ' b is bb
> t.data = t.data & Chr(b) ' add to string
> val = val - (b * s ^ 16) ' val is now ccdd

Public Function Hex2Bin(ByVal sHex As String) As String

Dim i As Integer
Dim j As Integer
Dim nDec As Double
Const HexChar As String = "0123456789ABCDEF"

For i = 1 To Len(sHex)
nDec = InStr(1, HexChar, Mid(sHex, i, 1)) - 1

For j = 3 To 0 Step -1
Hex2Bin = Hex2Bin & nDec \ 2 ^ j
nDec = nDec Mod 2 ^ j
Next j

Next i

i = InStr(1, Hex2Bin, "1")
If i <> 0 Then Hex2Bin = Mid(Hex2Bin, i)
End Function

--
Snutten
Reply-to adressen er gyldig inntil spam er mottatt

Tomas Christiansen (09-05-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 09-05-03 22:09

Helge Bjørkhaug skrev:
> Public Function Hex2Bin(ByVal sHex As String) As String
>
> Dim i As Integer
> Dim j As Integer
> Dim nDec As Double
> Const HexChar As String = "0123456789ABCDEF"
>
> For i = 1 To Len(sHex)
> nDec = InStr(1, HexChar, Mid(sHex, i, 1)) - 1
>
> For j = 3 To 0 Step -1
> Hex2Bin = Hex2Bin & nDec \ 2 ^ j
> nDec = nDec Mod 2 ^ j
> Next j
>
> Next i
>
> i = InStr(1, Hex2Bin, "1")
> If i <> 0 Then Hex2Bin = Mid(Hex2Bin, i)
> End Function

Inspireret af dit forslag, Helge, er her et andet forslag, som er lidt
kortere og kører lidt hurtigere:

Function Hex2Bin(ByVal sHex As String) As String
Const sHexBin As String = "0000 0001 0010 0011 0100 0101 0110 0111 1000
1001 1010 1011 1100 1101 1110 1111"
Dim lDigitNo As Long

For lDigitNo = 1 To Len(sHex)
Hex2Bin = Hex2Bin & Mid(sHexBin, 5 * Val("&h" & Mid(sHex, lDigitNo, 1))
+ 1, 4)
Next
End Function

-------
Tomas


Helge Bjørkhaug (10-05-2003)
Kommentar
Fra : Helge Bjørkhaug


Dato : 10-05-03 11:34

On Fri, 9 May 2003 23:09:06 +0200, "Tomas Christiansen"
<toc-01-nospam@blikroer.dk> wrote:

>Inspireret af dit forslag, Helge, er her et andet forslag, som er lidt
>kortere og kører lidt hurtigere:
>
>Function Hex2Bin(ByVal sHex As String) As String
> Const sHexBin As String = "0000 0001 0010 0011 0100 0101 0110 0111 1000
>1001 1010 1011 1100 1101 1110 1111"
> Dim lDigitNo As Long
>
> For lDigitNo = 1 To Len(sHex)
> Hex2Bin = Hex2Bin & Mid(sHexBin, 5 * Val("&h" & Mid(sHex, lDigitNo, 1))
>+ 1, 4)
> Next
>End Function

Ja, den var "neat".
Kan dog ikke brukes på BLOB.
Men de som jobber med så mange bit, kjenner vel også til begrensningene

--
Snutten
Reply-to adressen er gyldig inntil spam er mottatt

Tomas Christiansen (10-05-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 10-05-03 23:05

Helge Bjørkhaug skrev:
> Kan dog ikke brukes på BLOB.
> Men de som jobber med så mange bit, kjenner vel også til begrensningene


Hvori består problemet?

Funktionen kan i øvrigt performance-tunes lidt ved begynde med at tildele
Hex2Bin så mange spaces, som der vil være bit i resultatet, og derefter i
løkken ved brug af Mid(Hex2Bin, 4 * lDigitNo - 3, 4) tildele 4 bit værdier
til 4 spaces, i stedet for at tilføje til slutningen af Hex2Bin for hver
gennemløb.

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste