Forum: Mikrocontroller und Digitale Elektronik String bilden


von Sven B. (Gast)


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

von holger (Gast)


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.

von Sepp (Gast)


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★

von Sven B. (Gast)


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ß

von Sepp (Gast)


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

von Sven B. (Gast)


Lesenswert?

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

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.