Speziell von PureBasic aus gibt es keinen Befehl der einen Hex-String wieder in eine Dezimalvariable wandelt. Also wenn du von "FF" (dem Hex-Wert) wieder auf 255 kommen willst, musst du dir da einen Algorithmus schreiben welcher dies umrechnet.
Ich hab dazu hier mal schnell eine Prozedur geschrieben:
Code: Alles auswählen
Procedure hex_2_dec(hex$)
Protected decimal_wert
decimal_wert = 0
For z = 0 To Len(hex$) - 1
hex_single$ = Mid(hex$, Len(hex$) - z, 1)
Select hex_single$
Case "0"
decimal_wert = decimal_wert + (0 * Pow(16, z))
Case "1"
decimal_wert = decimal_wert + (1 * Pow(16, z))
Case "2"
decimal_wert = decimal_wert + (2 * Pow(16, z))
Case "3"
decimal_wert = decimal_wert + (3 * Pow(16, z))
Case "4"
decimal_wert = decimal_wert + (4 * Pow(16, z))
Case "5"
decimal_wert = decimal_wert + (5 * Pow(16, z))
Case "6"
decimal_wert = decimal_wert + (6 * Pow(16, z))
Case "7"
decimal_wert = decimal_wert + (7 * Pow(16, z))
Case "8"
decimal_wert = decimal_wert + (8 * Pow(16, z))
Case "9"
decimal_wert = decimal_wert + (9 * Pow(16, z))
Case "A"
decimal_wert = decimal_wert + (10 * Pow(16, z))
Case "B"
decimal_wert = decimal_wert + (11 * Pow(16, z))
Case "C"
decimal_wert = decimal_wert + (12 * Pow(16, z))
Case "D"
decimal_wert = decimal_wert + (13 * Pow(16, z))
Case "E"
decimal_wert = decimal_wert + (14 * Pow(16, z))
Case "F"
decimal_wert = decimal_wert + (15 * Pow(16, z))
EndSelect
Next z
ProcedureReturn decimal_wert
EndProcedure
Debug hex_2_dec("FF")
Jetzt kannst du einen beliebig langen Hex-String eingeben und erhälst dazu den Dezimalwert. Ich habs jetzt explizit mit 2-Stellen getestet, sollte aber auch mit 3, 4, 5, oder mehr Stellen gehen.
Dabei arbeitet die Prozedur so, dass sie von rechts nach links die Stellen abliest und sie den Dezimalwerten zuordnet und ausrechnet. Ganz rechts angefangen würde das bei "F" also 15 * 16^0 = 15 sein.
Diesen Wert + den nächsten, nämlich 15 * 16^1 = 240
+ 15 = 255 = "FF"
Wie du ja sicher weißt beginnt man da rechts und bei dem Exponenten 0 und arbeitet sich Stellenweise nach links vor, jeweils um 1 erhöhen. Meine Prozedur arbeitet dabei dynamisch, egal wie viele Stellen man hat, mittels For-Schleife und geht somit alle Stellen ab.
Jetzt könnte man vielleicht noch eine Fehlerroutine-Prüfung einbauen die erstmal abfragt, ob der eingegebene String wirklich ein Hex-Wert ist. Aber davon geh ich mal aus, dass du es dafür nutzt. Kannst du ja noch erweitern.
