Forum: Mikrocontroller und Digitale Elektronik char zu hex (Text)


von Johannes (Gast)


Lesenswert?

Hi,

ich möchte mit einem Var einzelne Chars über den UART verschicken.

diese können ja den Wert 0-255 also 0x0-0xFF annehmen.

Nun möchte ich nicht das Char einfach auf den UART geben, sondern das 
ganze als null terminierten String senden (also 4 Zeichen) BSP 255 
gesendet wird 0xFF.

Gibt es da für GCC eine funktion die mir die Variable entsprechend 
umwandelt?

Danke :)

von Dirk B. (dirkb2)


Lesenswert?

sprintf bzw. fprintf.

itoa ist möglicherweise auch vorhanden.

von STK500-Besitzer (Gast)


Lesenswert?

Johannes schrieb:
> also 4 Zeichen) BSP 255

das sind fünf Zeichen, da nullterminiert...

unsigned char String[5];
unsigned char Zahl = 255; // BSP
unsigned char Nibbel0 = Zahl & 0x0F;
unsigned char Nibbel1 = (Zahl>>4) & 0x0F;

String[0] = '0';
String[1] = 'x';
if (Nibble1 > 9) String[1] = Nibble1 + '0';
else String[1] = Nibble1 + 'A'- 10;
if (Nibble0 > 9) String[2] = Nibble1 + '0';
else String[2] = Nibble1 + 'A'- 10;
String[5] = '\0';


So, oder so ähnlich (ungetestet).

von Dirk B. (dirkb2)


Lesenswert?

STK500-Besitzer schrieb:
> Johannes schrieb:
>> also 4 Zeichen) BSP 255
>
> das sind fünf Zeichen, da nullterminiert...

'2' '5' '5' '\0' sind vier Zeichen.

Im Augenblick bekommt er nur ein Zeichen mit dem Wert 0xff.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Er will vier Zeichen '0', 'x', 'f' und 'f'.


printf("%02X", wert);

-edit

Ich hab' geschlampt, richtig siehts so aus:

printf("0x%02X", wert);

von Dirk B. (dirkb2)


Lesenswert?

Johannes,

bitte melde dich :-)

von Johannes (Gast)


Lesenswert?

Hi,

danke ich glaub damit komm ich weiter :-)

Ich hatte nicht so schnell mit Antworten gerechnet :-)

von Tim Taylor (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> printf("%02X", wert);

Sollte das nicht eine 8-stellige Ausgabe erzeugen? Mit %02 sind ja nur 
die Mindeststellen auf 2 festgelegt und mit 0 aufzufüllen.

Ansonsten:
1
  char input = 0xff;
2
  char output[5];
3
  
4
  sprintf(output, "%hX", input);
5
  strncpy(output, "0x", 2);
6
  printf("%s", output);

von Tim Taylor (Gast)


Lesenswert?

Nee, schon ok. Wenn der Wert ein echtes Zeichen ist, sollte die Breite 
auf 2 gehen, nur wenn man explizit einen Hex-Wert zuweist werden es 8 
Stellen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tim Taylor schrieb:
> Sollte das nicht eine 8-stellige Ausgabe erzeugen?

Du hast recht, die "integer promotion" auf vorzeichenbehaftete Werte 
macht mir hier einen Strick durch die Rechnung.

So aber ist's kürzer und passender:

printf("0x%02X", wert & 0xFF);

von Tim Taylor (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> So aber ist's kürzer und passender:
>
> printf("0x%02X", wert & 0xFF);

Jaja, der Wald und die Bäume.^^

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
Noch kein Account? Hier anmelden.