Forum: Compiler & IDEs int Umwandlung


von Christoph A. (paul87)


Lesenswert?

Hallo Leute,

ich bin am verzweifeln.

Ich lese mit einem µC int Werte ein. Ein int Wert entspricht einer 
bestimmten Zeit.

Also konkret:

0 entspricht 0.0s
1 entspricht 0.1s
2 entspricht 0.2s usw.

Wie kann ich die int Werte jetzt entsprechend umwandeln, so dass ich sie 
am Ende als char ausgeben kann? Die Ausgabefunktion verlangt als 
Datentyp char.

Vielen Dank für die super Hilfe hier!

Viele Grüße,

von Karl H. (kbuchegg)


Lesenswert?

Christoph A. schrieb:
> Hallo Leute,
>
> ich bin am verzweifeln.
>
> Ich lese mit einem µC int Werte ein. Ein int Wert entspricht einer
> bestimmten Zeit.
>
> Also konkret:
>
> 0 entspricht 0.0s
> 1 entspricht 0.1s
> 2 entspricht 0.2s usw.
>
> Wie kann ich die int Werte jetzt entsprechend umwandeln, so dass ich sie
> am Ende als char ausgeben kann?

itoa würde zb gehen.

> Die Ausgabefunktion verlangt als
> Datentyp char.

Du wirst schon erst mal eine Ausgabefunktion brauchen, die Strings 
ausgeben kann.

http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

von holger (Gast)


Lesenswert?

>Ich lese mit einem µC int Werte ein. Ein int Wert entspricht einer
>bestimmten Zeit.

Wieso int? Zeit kann ja wohl kaum negativ werden;)

von Christoph A. (paul87)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Du wirst schon erst mal eine Ausgabefunktion brauchen, die Strings
> ausgeben kann.

Ok, ich habe gerade nachgesehen. Ein String kann ich auch eingeben. Z.B. 
"test". Das wird aber als char eingelesen und in er Funktion dann in 
einen String umgewandelt. Nur wie bekomme ich jetzt 0.5 in die "__" 
Anführungszeichen?

von Christoph A. (paul87)


Lesenswert?

holger schrieb:
> Wieso int? Zeit kann ja wohl kaum negativ werden;)

Ja ok, unsigned int ;)

von Karl H. (kbuchegg)


Lesenswert?

Christoph A. schrieb:
> Karl Heinz Buchegger schrieb:
>> Du wirst schon erst mal eine Ausgabefunktion brauchen, die Strings
>> ausgeben kann.
>
> Ok, ich habe gerade nachgesehen. Ein String kann ich auch eingeben. Z.B.
> "test". Das wird aber als char eingelesen

Nö. Nicht als char. Als String.

> und in er Funktion dann in
> einen String umgewandelt. Nur wie bekomme ich jetzt 0.5 in die "__"
> Anführungszeichen?

?
Was jetzt.

Trennen wir erst mal die Dinge.
Eingabe
Ausgabe

Bei welchem Problem stehst du?

von J.-u. G. (juwe)


Lesenswert?

Christoph A. schrieb:
> Nur wie bekomme ich jetzt 0.5 in die "__"
> Anführungszeichen?

Mit der Funktion itoa für int bzw. utoa für unsigned int. Steht doch im 
oben geposteten Link.

Vorher musst Du Deinen Wert natürlich in Vorkomma- und Nachkommastellen 
zerlegen. Das ist aber Mathematik und hat eigentlich nichts mit C zu 
tun.

Dann musst Du Deine Ausgaberoutine 3mal aufrufen. Zuerst die 
Vorkommastellen ausgeben, dann das Dezimaltrennzeichen und dann die 
Nachkommastellen.

von DirkB (Gast)


Lesenswert?

Du musst auch unterscheiden, ob die Funktion char oder char* braucht.

von Christoph A. (paul87)


Lesenswert?

Also das ist die Funktion bzw. der Funktionsaufruf:

void LCD_Print(const  char* Text, unsigned char X, unsigned char Y, 
unsigned char FontNr, unsigned char XScale, unsigned char YScale, 
unsigned int ForeColor, unsigned int BackColor)
{...};

Ich hatte gehofft pro Wert (zb 0.3) die Funktion nur einmal aufrufen zu 
müssen.

Karl Heinz Buchegger schrieb:
> Was jetzt.
>
> Trennen wir erst mal die Dinge.
> Eingabe
> Ausgabe
>
> Bei welchem Problem stehst du?

Das Problem habe ich doch oben beschrieben. Ich bekomme in den µC 
unsigned int Werte (0, 1, 2, 3, ... , ). Jeder dieser Werte entspricht 
eine Zeiteinheit in 0.1s Schritten. Also:

0 -> 0
1 -> 0.1
2 -> 0.2
.
.
. usw.

Nun habe ich versucht einfach per Definition jedem int Wert einen 
entsprechenden String "0.3" zuzuweisen. Hat irgendwie nicht geklappt.

Dann wollte ich einfach den eingelesenen Wert erst in eine 
Gleitkommazahl umwandeln und diese dann durch 10 teilen. Den neuen Wert 
dann ausgeben. Aber wie?

von holger (Gast)


Lesenswert?

>Dann wollte ich einfach den eingelesenen Wert erst in eine
>Gleitkommazahl umwandeln und diese dann durch 10 teilen. Den neuen Wert
>dann ausgeben. Aber wie?

printf("Wert: %d.%d\n", wert/10, wert%10);

von Christoph A. (paul87)


Lesenswert?

holger schrieb:
> printf("Wert: %d.%d\n", wert/10, wert%10);

Hallo Holger. Die Funktion kann ich leider nicht gebrauchen. Der Wert 
muss hier rein:

void LCD_Print(const  char* Text, unsigned char X, unsigned char Y,
unsigned char FontNr, unsigned char XScale, unsigned char YScale,
unsigned int ForeColor, unsigned int BackColor)
{...};

von holger (Gast)


Lesenswert?

>>Dann wollte ich einfach den eingelesenen Wert erst in eine
>>Gleitkommazahl umwandeln und diese dann durch 10 teilen. Den neuen Wert
>>dann ausgeben. Aber wie?
>
>printf("Wert: %d.%d\n", wert/10, wert%10);

Ach Blödsinn du hast da ne andere Ausgabe:

char buffer[9];
snprintf(buffer, sizeof(buffer), "%d.%d\n", wert/10, wert%10);
LCD_Print(buffer,...

von Christoph A. (paul87)


Lesenswert?

holger schrieb:
> char buffer[9];
> snprintf(buffer, sizeof(buffer), "%d.%d\n", wert/10, wert%10);
> LCD_Print(buffer,...

Das mit dem char Array hatte ich auch schon probiert. Aber ich wollte 
dann einfach das Array irgendwie ausgeben, ohne es vorher umzuwandeln. 
Aber deine Funktion sieht gut aus. Die werde ich gleich morgen testen.

Vielen Dank!

von Christoph A. (paul87)


Lesenswert?

Vielen Dank!!!!!!!

Hat alles super geklappt!

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.