Hexziffern in String wandeln
-
Hallo.
Ich bekomme über RS232 einen String zurück in dem eine Firmware steht.
Der String sieht ungefähr so aus: 0x02, 0x23,..., 0x12, 0x0c, 0x6E.
Die richtige Stelle des Strings, in dem die Firmware enthalten ist,
habe ich mir ausgeschnitten --> 0x12, 0x0c
(Ich weiss überall kommt noch die Nullterminierung dran. Lasse ich mal weg.)
Jetzt möchte ich gerne diesen Wert in meinem Dialog so anzeigen:Firmware: 1.2.0.c <-- Schreibe ich später in einen Static Text
Wie gehe ich da vor?
Hab schon mit strtol probiert, oder die Werte auf zwei Chars verteilt,
komme aber nicht weiter. Mir fehlt die Idee.
Danke für eure Hilfe.Gruß
-
Weiss das keiner von euch?
Bräuchte ja nur mal nen String in dem 120c steht.
Den Rest bastel ich mir schon selbst.
Und Falls das angeblich schon 1000mal im Forum steht, wäre ich für
einen entsprechenden Suchbegriff oder Link sehr dankbar.
Meine Suche ergab bis jetzt noch keine brauchbaren Ergebnisse.Gruß
-
Also, mit CString::Format und %X wird eine Zahl ein Hex-String.
Aber wenn du eh schon einen String hast, kannst du da evtl. mit Mid arbeiten?
-
BYTE cChar1 = 12; BYTE cChar2 = 0c; CString szString1 = cChar1; szString1 += cChar2;
-
Habe das mit Format probiert. Das Problem ist allerdings, dass 0x0c dann als "c" im String steht. Aber leider gehört die Null, die (logischerweise) weggelassen wird zur Firmware. Noch ne Idee?
@maRKus23:
Die Variante werde ich auch gleich noch testen.Aber Gegenfrage. Folgende Idee:
Ich bekomme nen String zurück, schneide mir den Teil mit der Firmware aus und schreibe die zwei Hexwerte in 2 BYTE.
Nun Werte ich die BYTES als 4er BitPäckchen aus. So bekäme ich auch die "0" mit.
Wäre sowas möglich?
-
Du kannst die Bytes natürlich noch auseinandernehmen in ihre Einzelteile (wenn du willst, sogar bis runter auf einzelne Bits):
BYTE c = ...; //z.B. 0x12 oder 0x0C BYTE hc = (c>>4)&0xF; //oberes Halbbyte - 1 bzw. 0 BYTE lc = c&0xF; //unteres Halbbyte - 2 bzw. 11=C
-
Jawoll.. genau das habe ich gesucht...
Super! Vielen Dank!! Jetzt läufts.
-
.. und mit dem hc und lc von CStoll dann
char GetHexChar(BYTE b) {return "0123456789ABCDEF"[b];}aufrufen.