Forum: Mikrocontroller und Digitale Elektronik Frage zu C


von van Tronje (Gast)


Lesenswert?

Hallo miteinander,

weiss jemand von euch, wie man 2 Char-Zeichen in eine float-Variable
umwandelt, geht das ueberhaupt??? Wuerde mir viel Arbeit ersparen, weil
ich sonst das Programm komplett umschreiben muesste.
Waer cool, wenn das jemand wuesste.

Gruss Thorsten D.

von Karl H. (kbuchegg)


Lesenswert?

Mit der Beschreibung kann zumindest ich nichts anfangen.
Und ich wüde von mir selbst sagen, dass ich schon ne Menge
Schweinereien in C gemacht.

Wo kommen die Char her? Was ist da drinnen? Warum sind
es nur 2? Was ist das übergeordnete Ziel?

von van Tronje (Gast)


Lesenswert?

Ich empfange 2 Char-Zeichen und will daraus eine float-Zahl mit 2
Nachkommastellen machen, also zum Bsp. 0,23 (die 0 bleibt immer gleich
und die 2 Nachkommastellen will ich aus den 2Char-Zeichen herleiten).
Das muesste doch irgendwie gehn oder???

von inoffizieller WM-Rahul (Gast)


Lesenswert?

FloatZahl = (Char[0]-'0') * 0.1 + (Char[1]-'0') *0.01;

von van Tronje (Gast)


Lesenswert?

Danke Alter, es klappt!!!

Aber wie um Himmels Willen funktioniert die Formel???
Kannst du mir Sie noch kurz erlaeutern, verstehe Bahnhof.
Gruss Thorsten

von andreas kasper (Gast)


Lesenswert?

FloatZahl = (Char[0]-'0') * 0.1 + (Char[1]-'0') *0.01;

funktioniert so:
zahlen in char variablen werden im ascii code dargestellt. was so viel
bedeutet dass eine '0' in der char variable als 0x30 eine '1' als
0x31 usw dargestellt werden.

willst du nun den eigentlichen wert deiner zahl wissen so musst du eben
diese 0x30 oder die ascii '0' subtrahieren. dann bekommst du eine
"normale" 0 (0x00) zurück mit der du dann weiterrechnen kannst.

tja. die multiplikation sollte klar sein.

andi

von van Tronje (Gast)


Lesenswert?

OK, Sorry, habs verstanden jez, Danke

von van Tronje (Gast)


Lesenswert?

OK, danke fuer dei Antworten Leute, aber ncoh eine kleien Zugabe, ich
will noch was extra machen. ich will aus 5 einzelnen integer-Variablen
eine einzige unsigned int machen. Wie koennte ich das anstellen???
Also z.B. a=2 b=3 c=0 d=0 e=0 gibt ui=23000
Jemand ne Idee??

von Karl H. (kbuchegg)


Lesenswert?

Du bist aber schon arg fantasielos.
Ist doch das gleiche Prinzip wie vorhin!

  ui = a * 10000 +
       b *  1000 +
       c *   100 +
       d *    10 +
       e;

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ist das hier

  ui = a * 10000 + b * 1000 + c * 100 + d * 10 + e;

nicht naheliegend?

von Dominic R. (dominic)


Lesenswert?

Vor der nächsten Frage würde ich ihn erklären lassen, wer ihm gesagt
hat, dass er das wollen soll...

Gruss,

Dominic

von Karl H. (kbuchegg)


Lesenswert?

Alternativ kannst du auch noch die Horner Regel anwenden und
ein bischen optimieren.

  ui = (((((( a * 10 ) + b ) * 10 + c ) * 10 ) + d ) * 10 ) + e;

Jetzt muss nur noch der Compiler mitspielen und die Multiplikationen
mit 10 durch eine schnellere Additionens/Schiebe-Sequenz ersetzen.

von van Tronje (Gast)


Lesenswert?

OK, danke.
Tschuldigung, bin halt net son Ferak wie ihr, brauch immer etwas
laenger... :-)

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.