Om man har omvandlat ett tal till hexadecimal form med hex$, hur får man då det tillbaka till vanlig decimal form? Enkelt: Kan du förklara vad det du skriver beyder? Hex retunerar en sträng vilket inte kan konverteras till en lång. hej Det verkar som om VB returnerar 2:a komplementet när man gör en val-konvertering på ett hex-värde..... Dessutom blir svaret en signed integer, dvs teckenbit i MSB. Jag skrev en liten Function som man man omvandla olika tal med:Hexadecimal form
Sv: Hexadecimal form
dim decimalt as Long
decimalt = Clng("&H" & Hex(25000))
/peterh (departement of computer science EK - Järbo)Sv: Hexadecimal form
Varför fungerar t.ex inte detta:
Dim decimalt As Long
Dim olle As Long
olle = Hex(25000)
decimalt = CLng("&H" & olle)
Text1 = decimaltSv: Hexadecimal form
Dett är därför du får ett fel. För att din kod skall fungera ändrar du datatyp på olle till sträng.
Dim decimalt As Long
Dim olle As String
olle = Hex(25000)
decimalt = CLng("&H" & olle)
Text1 = decimalt
Visual basic använder prefixet &H för hexadecimala tal. När den försöker konvertera en sträng till ett tal kontrollerar den om deta prefix finns och om det är ett giltligt tal. Sv: Hexadecimal form
Har inte testat men funkar verkligen Clng("&HABD0")
Trodde att det skulle var Val("&HABD0")
SvenSv: Hexadecimal form
Alltså: val("&H7FFF") = 32767 och val("&H8000") = -32768
2:a komplementet beräknas, (för dom som ej vet detta).... På följande vis...
invertera samtliga bitpositioner i talet och addera 1.
/peterhSv: Hexadecimal form
Public Function ConvertBase36(Value As String, BaseOfValue As Single, TargBase As Single) As String
Str3 = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Str2 = Value
Y = BaseOfValue
Z = TargBase
W = Len(Str2)
a = 0
For X = 1 To W
a = a + Y ^ (W - X) * InStr(Str3, Mid(Str2, X, 1))
Next X
S = 0
Str2 = ""
For X = 46 To 0 Step -1
T = Int(a / Z ^ X)
If T Then
a = a - T * Z ^ X
Str2 = Str2 & Mid(Str3, T, 1)
S = 1
Else
If S Then
Str2 = Str2 & 0
End If
End If
Next X
ConvertBase36 = Str2
End Function
Public Function ConvertBase255(Value As String, BaseOfValue As Single, TargBase As Single) As String
Str2 = Value
Y = BaseOfValue
Z = TargBase
W = Len(Str2)
a = 0
For X = 1 To W
a = a + Y ^ (W - X) * Asc(Mid(Str2, X, 1))
Next X
S = 0
Str2 = ""
For X = 46 To 0 Step -1
T = Int(a / Z ^ X)
a = a - T * Z ^ X
Str2 = Str2 & Chr(T)
Next X
ConvertBase255 = Str2
End Function