char und int in string umwandeln

Gast #519723
Lesenswert?

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

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

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

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

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

@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...

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