mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String bilden


Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich habe wieder ein Problem.
Habe folgendes vor...

//zahl1 bis zahl5 sind immer nur einstellige Ziffern (0 bis 9)
unsigned char zahl1=1;
unsigned char zahl2=2;
unsigned char zahl3=3;
unsigned char zahl4=4;
unsigned char zahl5=5;

//daher ist der String immer 5-stellig
char ausgabe[6];

//werden nacheinander eingefügt und bilden einen String
strcat(ausgabe,zahl1);
strcat(ausgabe,zahl2);
strcat(ausgabe,zahl3);
strcat(ausgabe,zahl4);
strcat(ausgabe,zahl5);
strcat(ausgabe,"\0");

//aus dem String einen Long-Wert bilden
unsigned long gesamt=atol(ausgabe);

So klappt es aber nicht... warum ?
Wie kann ich dieses Problem anderes lösen ???

Müssen die Variablen zahl1 bis zahl5 null terminiert sein ?

Danke schon mal

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie kann ich dieses Problem anderes lösen ???

Ein C Buch kaufen.

>Müssen die Variablen zahl1 bis zahl5 null terminiert sein ?

Wenn es Strings wären ja. Es sind aber nur Zahlen
und auch kein ASCII Code.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..kommt drauf an, was du eigentlich erreichen willst..

z.B. einen String erzeugen (alles Pseudocode):
for ((i = 0; i < länge; i++))
   ausgabe[i] = zahl[i] +'0';
ausgabe[länge] = 0;

..oder eine Zahl mit Basis 10:
ergebnis = 0;
for ((i = 0; i < länge; i++))
   ausgabe *= 10;
   ausgabe += zahl[i];

du kannst auch den Umweg gehen, erst einen String zu erzeugen (nache 
Methode 1) und dann daraus eine Zahl, das macht aber noch nicht so 
richtig Sinn :-)

Ergo nochmals die Frage: Was genau willst Du erreichen? Zum Thema 
'strcat' empfehle ich die Lektüre der Manpage (behelfsweise der Doku) 
★hint★

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Sepp.

Was habe ich vor :

1. Die Variablen zahl1 bis zahl5 erhalten einen einstelligen Wert. 0-9
2. Daraus möchte ich einen String bilden und ausgeben (z.B. LCD)
3. Dann möchte ich daraus einen Long-Wert bilden und damit rechnen...

Das alles ergibt vielleicht nicht den Sinn und dient zu Übungszwecken.

Gruß

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1. Die Variablen zahl1 bis zahl5 erhalten einen einstelligen Wert. 0-9
> 2. Daraus möchte ich einen String bilden und ausgeben (z.B. LCD)

Ok, dann die erste Methode:
ausgabe[0] = zahl1 +'0';
ausgabe[1] = zahl2 +'0';
ausgabe[2] = zahl3 +'0';
ausgabe[3] = zahl4 +'0';
ausgabe[4] = zahl5 +'0';
ausgabe[5] = 0;

mach_was_mit_string(ausgabe);

Falls zahl1..zahl5 in einem Array liegt, dann kannst das auch eleganter 
in eine Schleife packen wie oben schon angegeben (auf Indizes 
achten/ggf. anpassen!!)

> 3. Dann möchte ich daraus einen Long-Wert bilden und damit rechnen...

Da hat Deine Methode schon gepasst. Effizienter gehts aber, wenn du 
beides in einem Aufwasch erledigst, das könnte dann z.b. so aussehen:

ergebnis = 0;
for (i = 0; i < länge; i++)
   ausgabe[i] = zahl[i] +'0';
   ergebnis *= 10;
   ergebnis += zahl[i];
ausgabe[länge] = 0;
mach_was_mit_string(ausgabe);
mach_was_mit_zahl(ergebnis);


HTH

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Sepp.
Das hat geklappt.
Wobei Deine Variante mit der Schleife um einiges eleganter ist.
Du hast mir sehr geholfen!

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.