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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.