mikrocontroller.net

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


Autor: Nino (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Z.B. mit den Bibliotheksfunktionen aus der stdlib.h...

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nino (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß?

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
unsigned int wert;
char string[6];
for(unsigned char i = 0; i < 5; i++)
{
    string[i] = (wert % 10) + '0';
    wert /= 10;
}
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.

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Michael König (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Nino (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.