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 :)
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).
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.
Er will vier Zeichen '0', 'x', 'f' und 'f'. printf("%02X", wert); -edit Ich hab' geschlampt, richtig siehts so aus: printf("0x%02X", wert);
Hi, danke ich glaub damit komm ich weiter :-) Ich hatte nicht so schnell mit Antworten gerechnet :-)
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); |
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.
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);
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.