Hallo, ich möchte gerne eine 32 Bit Variable in eine Zeichenkette umwandeln. uint32_t = 0X00000123; Die Funktion "atoi" liefert zwar den passenden Dezimalwert als char ,hier 291. Ich möchte aber gerne den urpsrünglichen Wert als hex Zahl über UART ausgeben, also "0X00000123" Hat da irgendjemand eine Idee wie man das macht ? Viele Grüße
Entweder nimmst Du printf, wenn Du den Overhead an Speicher und Rechenzeit verkraften kannst, oder Du konvertierst das halbbyteweise selber.
sprintf mit format-specifier X, Irgendwie so: sprintf("0X%08X",x)
Franz schrieb: > Die Funktion "atoi" liefert zwar den passenden Dezimalwert als char > ,hier 291. hmm, da verwechselst du einiges atoi(0x123) sollte erst eine Compilerwarnung erzeugen und wenn man das ignoriert wird es sehr sehr wahrscheinlich nicht 291 zurückgeben
Walter S. schrieb: > Franz schrieb: >> Die Funktion "atoi" liefert zwar den passenden Dezimalwert als char >> ,hier 291. > > hmm, da verwechselst du einiges > > atoi(0x123) > sollte erst eine Compilerwarnung erzeugen und wenn man das ignoriert > wird es sehr sehr wahrscheinlich nicht 291 zurückgeben Bei mir steht 291 hex codiert drin.
Nop schrieb: > oder Du konvertierst das halbbyteweise selber. Ich habe da dort ein paar Betrachtungen dazu: http://www.lothar-miller.de/s9y/archives/94-String-als-Tabelle-in-C.html Franz schrieb: >> wird es sehr sehr wahrscheinlich nicht 291 zurückgeben > Bei mir steht 291 hex codiert drin. Da steht hex x33, x39 und x31 drin. Das was du markiert hast, ist das ASCII-Zeichen, das diesen Hex-Wert hat.
kannst deinen String auch so basteln, musst nur auf long gehen, also verdoppeln oder wenn kürzer dann in eine Schleife legen void HexShortToString(uint8_t *puc_String, uint16_t us_Wert) { const uint8_t uc_HexZiffer[] = {"0123456789ABCDEF"}; uint8_t *puc_Ptr; puc_Ptr = puc_String; *puc_Ptr = uc_HexZiffer[((us_Wert >> 12) & 0x0F)]; puc_Ptr++; *puc_Ptr = uc_HexZiffer[((us_Wert >> 8) & 0x0F)]; puc_Ptr++; *puc_Ptr = uc_HexZiffer[((us_Wert >> 4) & 0x0F)]; puc_Ptr++; *puc_Ptr = uc_HexZiffer[((us_Wert) & 0x0F)]; } /* ende HexShortToString */
Franz schrieb: > ich möchte gerne eine 32 Bit Variable in eine Zeichenkette umwandeln. > > uint32_t = 0X00000123; > > Die Funktion "atoi" liefert zwar den passenden Dezimalwert als char Nein. > Ich möchte aber gerne den urpsrünglichen Wert als hex Zahl Dann mach es doch. Franz schrieb: > sry ich meinte itoa Ja. Eben. Und jetzt liest du dir nochmal durch, wie du itoa (je nach Plattform für uint32_t wohl eher utoa() bzw. ultoa()) aufrufen mußt. Insbesondere was der dritte Parameter radix bedeutet. <kopfschüttelnd>
Franz schrieb: > hahaha sry ich meinte itoa itoa gehört nicht zum C-Standard. Es gibt auch Versionen, denen kannst du die Basis der Darstellung als Parameter mitgeben. Wenn dein itoa es nicht kann, ist es eine nette Übung (es selber zu machen oder danach zu suchen)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.