Hex zu dezimal umwandlung fehler wenn höchste stelle 8 oder 9
Hallo zusammen,
habe im Grunde überhaupt keine Ahnung von Programmieren und mir mehr oder weniger einen vbs code für meine Zwecke zusammen gesucht und stehe grad vor einem Problem:
habe mir über Eval("&H" & "eineMeinerHexZahlen" ) versucht diverse Zahlen von hex nach dezimal umzuwandlen, hat auch wunderbar geklappt, nur bei hex Zahlen, die als höchste stelle ne 8 oder 9 haben kommen irgendwie negative falsche Werte bei heraus, glaub zumindest, dass es an den Stellen liegt.
hoffe es findet sich jemand, der mir das Problem dabei erklären kann.
besten Dank im voraus !
Mfg
Vollnoob ^^
habe im Grunde überhaupt keine Ahnung von Programmieren und mir mehr oder weniger einen vbs code für meine Zwecke zusammen gesucht und stehe grad vor einem Problem:
habe mir über Eval("&H" & "eineMeinerHexZahlen" ) versucht diverse Zahlen von hex nach dezimal umzuwandlen, hat auch wunderbar geklappt, nur bei hex Zahlen, die als höchste stelle ne 8 oder 9 haben kommen irgendwie negative falsche Werte bei heraus, glaub zumindest, dass es an den Stellen liegt.
hoffe es findet sich jemand, der mir das Problem dabei erklären kann.
besten Dank im voraus !
Mfg
Vollnoob ^^
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 148050
Url: https://administrator.de/forum/hex-zu-dezimal-umwandlung-fehler-wenn-hoechste-stelle-8-oder-9-148050.html
Ausgedruckt am: 21.04.2025 um 04:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo Vollnoob!
Hab's mir zwar nicht genauer angesehen, aber vermutlich tritt dieses Verhalten nur für 8-stellige Hexwerte von &H8000000 bis &HFFFFFFFF auf. Der Datentyp "Long" bietet einen Wertebereich von -2.147.483.648 bis 2.147.483.647 - ist das höchste Bit gesetzt, wird dieses als Vorzeichen interpretiert.
BTW: Zur Konvertierung kannst Du anstelle von "
... und folgender Workaround (die Hex-Zahl steht in der Variablen H) sollte eigentlich klappen:
Das Voranstellen von "1" sollte die Hex-Zahl auf jeden Fall in den positiven Bereich bringen und das Subtrahieren von "&H1" + der entsprechenden Anzahl von Nullen rechnerisch die String-Manipulation wieder rückgängig machen ...
Grüße
bastla
Hab's mir zwar nicht genauer angesehen, aber vermutlich tritt dieses Verhalten nur für 8-stellige Hexwerte von &H8000000 bis &HFFFFFFFF auf. Der Datentyp "Long" bietet einen Wertebereich von -2.147.483.648 bis 2.147.483.647 - ist das höchste Bit gesetzt, wird dieses als Vorzeichen interpretiert.
BTW: Zur Konvertierung kannst Du anstelle von "
Eval()
" auch "CLng()
" oder zB "CDbl()
" verwenden ...... und folgender Workaround (die Hex-Zahl steht in der Variablen H) sollte eigentlich klappen:
Dez = CDbl("&H1" & H) - CDbl("&H1" & String(Len(H),"0"))
Grüße
bastla

Hallo bastla!
Der Trick mit CDbl (64Bit) funktioniert super, aber wie bekomme ich auf einfachem Wege den Hex-String wieder zurück. Mit Hex funktioniert es nicht?
Gruß Dieter
Der Trick mit CDbl (64Bit) funktioniert super, aber wie bekomme ich auf einfachem Wege den Hex-String wieder zurück. Mit Hex funktioniert es nicht?
H = "FFFFFFFF"
D = CDbl("&H1" & H) - CDbl("&H1" & String(Len(H), "0"))
X = Hex(D) 'Überlauffehler
Gruß Dieter
Hallo Dieter!
Einen einfachen Weg kenne ich leider auch nicht, und eine passende selbst geschriebene Function hast Du ja sicher schon oder bekommst Du auf jeden Fall selbst hin
(in Batch hatten wir das Thema übrigens auch schon mal: Dezimal zu Hexadezimal ) ...
Grüße
bastla
Einen einfachen Weg kenne ich leider auch nicht, und eine passende selbst geschriebene Function hast Du ja sicher schon oder bekommst Du auf jeden Fall selbst hin
Grüße
bastla

Hallo bastla!

Noch einen schönen Sonntag!
Gruß Dieter
Zitat von @bastla:
Einen einfachen Weg kenne ich leider auch nicht, und eine passende selbst geschriebene Function hast Du ja sicher schon oder
bekommst Du auf jeden Fall selbst hin
....
Yepp, so etwas ähnliches, wie in dem Batch-Link habe ich auch in VB (Bits L/R-Rotieren und L/R-Schieben), aber auf den den Trick mit CDbl ("&H1 & ....) bin ich noch nicht gekommen und dachte, dass Du dafür eventuell auch eine einfache Lösung hastEinen einfachen Weg kenne ich leider auch nicht, und eine passende selbst geschriebene Function hast Du ja sicher schon oder
bekommst Du auf jeden Fall selbst hin
Noch einen schönen Sonntag!
Gruß Dieter
Hallo Dieter!
Tatsächlich hatte ich mich bis gestern mit diesem Thema eigentlich überhaupt nicht beschäftigt - der Workaround ist ein "Abfallprodukt" von Batch-Lösungen zum Thema "Interpretation von mit Null beginnenden Zahlen als Oktalwerte" (was dort dann tatsächlich bei "08" und "09" zu Fehlern führt) ...
Auch Dir einen schönen Rest des Sonntags!
bastla
Tatsächlich hatte ich mich bis gestern mit diesem Thema eigentlich überhaupt nicht beschäftigt - der Workaround ist ein "Abfallprodukt" von Batch-Lösungen zum Thema "Interpretation von mit Null beginnenden Zahlen als Oktalwerte" (was dort dann tatsächlich bei "08" und "09" zu Fehlern führt) ...
Auch Dir einen schönen Rest des Sonntags!
bastla