View Full Version : Hexzahl in integer umwandeln
Hallo allerseits,
ich bitte um euere Hilfe zu folgendem Thema:
Ich bekomme in VARPG eine Hexzahl. Zum Beispiel "51" oder "A3", etc.
Ich muss diese mit mit normalen Dezimalzahlen vergleichen. Gibt es eine RPG Funktion, die mir hinten die Dezimalzahl ausspuckt, wenn ich vorne die Hexzahl reinschmeisse?
Also HEX = 51 ---> Dezimal = 81 order HEX = A3 ---> Dezimal = 163
Schon mal danke für euro Hilfe!!
Mfg KAMPI
Naja, nicht direkt:
D DS
D BIN2 5I 0 inz
D CHAR 1 overlay(BIN2:2)
char = 'A';
if Bin2 = ....
Vertan vertan ;)
Wenn du die Zeichenwerte 'A3' hast und nicht den Hexwert, also X'A3', dann musst du die C-Funktion
int sscanf(const char *buffer, const char *format, argument-list);
verwenden.
Danke erst mal für die Antworten. Werde das mal probieren.
Mfg KAMPI
Zu deiner ersten Antwort noch mal:
Also der Wert steht in nem String, den ich über die Serielle Schnittstelle aus nem Tester auslese (alle Werte sind da dezimal, nur der eine nicht :mad: ), und da steht dann nicht nur z.B. "51" sonder "0x51". Ist das dann ne "richtige" Hex Zahl, bei der ich dein erstes Beispiel benutzen kann? Abgesehen davon verstehe ich das noch nicht ganz ... :o
Mfg KAMPI
Das 1. Beispiel ist hierfür korrekt.
Zur Erklärung:
5I 0 = 2-Byte-Binär als Ganzzahl, also X'0000' im Speicher.
Durch das Overlay auf Stelle 2 wird das Zeichen eben Rechtsbündig übertragen und kann dann als Zahl ausgewertet werden.
Zum Vergleich RPG:
I DS
I I B 1 20BIN2
I 2 2 XCHAR
MOVE FELD XCHAR
Z-ADD BIN2 ....
:
Ah so, danke für die Erklärung.
Ich habe es in der zwischenzeit selber mit einer Routine gelöst.
Ich splitte meine Zahl (z.B. "51") erst mal auf in "5" und "1". Dann schaue ich nach, ob in den beiden Feldern "ABCDEF" vorkommt. Wenn ja würde ich halt den entsprechenden Dezimalwert reinschreiben.
Dann wird bei diesem Beispiel die "5" *16 genommen und mit der "1" addiert. Dann habe ich meinen Dezimalwert!
Funktioniert und hat nicht lange gedauert es zu programmieren. :)
Trotzdem noch mal danke für deine Hilfe.
Mfg KAMPI
Ganz schön kompliziert, da du ja erst noch von Hex expandieren musst, also aus X'51' eben '51'. Wie löst du das ?
Ansonsten zum Rechnen bietet sich auch eine Tabelle "0123...def' an in der man die Zeichen suchen läßt, der (Index-1) ergibt die Wertigkeit.
Naja, am einfachsten gehts jedoch tatsächlich mit C-Funktionen / MI-API's.
Ich weiss, dass der mein Wert in dem großen String, den ich über den Com-Port bekomme, immer an einer bestimmten Stelle Anfängt und 5 Stellen lang ist. Die ersten beiden Stellen sind immer "0x". Dann kommt halt max. dreistellig der Hex-Wert. Also nehme ich mir mit nen Substring einfach die drei Stellen nach den "0x".
Mfg KAMPI