Forum: Mikrocontroller und Digitale Elektronik char und int in string umwandeln


von Nino (Gast)


Lesenswert?

Hallo zusammen wie kann man char und int Variablen in strings umwandeln?
Danke für eure Hilfe!

von johnny.m (Gast)


Lesenswert?

Z.B. mit den Bibliotheksfunktionen aus der stdlib.h...

von ARM-Fan (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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

von Nino (Gast)


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ß?

von ozo (Gast)


Lesenswert?

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?

von johnny.m (Gast)


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.

von Rahul D. (rahul)


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

von Michael König (Gast)


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.

von Thorsten (Gast)


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.

von johnny.m (Gast)


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

von Nino (Gast)


Lesenswert?

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