Hexadezimalwert in eine Zeichenkette umwandeln

Gast #5590260
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.