Hexadezimalwert in eine Zeichenkette umwandeln

Gast #5590260
Lesenswert?

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
Gast #5590303
Lesenswert?

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.
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #5590304
Lesenswert?

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.
#5590314
Lesenswert?

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 */
#5590406
Lesenswert?

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>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren