Hallo zusammen wie kann man char und int Variablen in strings umwandeln? Danke für eure Hilfe!
Ich ignoriere mal den zweiten Thread mit den vieeeeeeeeeeeeeeeeeelen Fragezeichen und schubse dich trotzdem nochmal ein Stückchen weiter in die richtige Richtung. Stichwort: sprintf
@ARM-Fan: sprintf ist für das Vorhaben völlig oversized. Deshalb ja mein diskreter Hinweis, die Stringkonvertierungsfunktionen (z.B. itoa) aus der stdlib.h zu verwenden.
Ja ich weiß und das es fertige Funktionen gibt weiß ich auch ich brauche aber den Weg dahin wo ich hinwill zu Fuß. Habe gerade einaml ein großes Brett vorm Kopf außerdem möchte ich bei einer µC Anwendung auf sprintf gerne verzichten. Wie macht man das zu Fuß?
mit nachdenken? Oder vielleicht könntest du dir ja mal anschauen, wie das die von dir geschmähten Bibliotheksfunktionen machen und das als Denkanstoß nehmen?
Aha, doch mal vernünftige Infos. Warum nicht gleich so? Wenn Du einen Integer-Wert hast, dann machst Du in einer Schleife eine Division durch 10 mit Rest. Den Rest schreibst Du in Deinen ASCII-String an die entsprechende Stelle, wobei Du noch den Wert des ASCII-Zeichens für 0 dazuaddieren musst. Also z.B.
1 | unsigned int wert; |
2 | char string[6]; |
3 | for(unsigned char i = 0; i < 5; i++) |
4 | {
|
5 | string[i] = (wert % 10) + '0'; |
6 | wert /= 10; |
7 | }
|
8 | string[5] = '\0'; |
Jetzt stehen in Deinem string die einzelnen Dezimalstellen in der Reihenfolge 1er, 10er, 100er... und am Ende ein Nullterminator. Letzteren brauchst Du, um bei einer eventuellen Ausgabe das Stringende detektieren zu können. Durch eine entsprechende Änderung der Schleife kannst Du natürlich auch die Reihenfolge der Dezimalstellen umdrehen.
>Wie macht man das zu Fuß?
unsigned char n = 123;
unsigned char s[3];
s[0] = n / 100 + '0'
n %= 100;
s[1] = n / 10 + '0';
n %= 10;
s[2] = n + '0';
Oder so ähnlich...
Ich mach sowas immer in einer Schleife ohne "/" und "%". Wie ich das
mache, bleibt mein Geheimnis...
Wo das Problem beim Umwandeln von "char" zu "string" liegen soll, ist mir definitiv klar, da es in C keine Strings sondern nur Ketten von Chars gibt. (Ich gehe jetzt mal davon aus, daß Du mit C arbeitest...) Zum Umwandeln von "int" in Zeichenketten: Man nehme sich den Kernighan & Ritchie ("The C Programming Language") und schlage dort den Code für "printd" nach. Wenn man C programmiert, sollte man dieses Buch (notfalls auch eine Übersetzung) ohnehin besitzen.
Hier noch ein Bsp. wo eine Hex-Zahl als String gewandelt wird: void btoa( char *d, unsigned char val ) // d= Puffer wo String hin soll { unsigned char v; v = val>>4; d[0] = (v>9) ? v+'7' : v+'0'; v = val&0x0f; d[1] = (v>9) ? v+'7' : v+'0'; d[2] = '\0'; } Funktioniert wie gesagt für Zahlen von 0-255, Ausgabe Hex als ASCII.
@Thorsten: Ich glaube, Nino wollte eine dezimale Ausgabe. Kannst Du aber nicht wissen, wenn Du den (mittlerweile augenscheinlich vom Admin gelöschten) anderen Thread mit den 16 Fragezeichen nicht gelesen hast...
aller besten Dank an alle! Möchte mich nocheinmal für den zweiten Thread entschuldigen und auch für evtl. unangebrachte Äußerungen von meiner Seite!
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.