mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu C


Autor: van Tronje (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: van Tronje (Gast)
Datum:

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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

Autor: van Tronje (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Alter, es klappt!!!

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

Autor: andreas kasper (Gast)
Datum:

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

Autor: van Tronje (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, Sorry, habs verstanden jez, Danke

Autor: van Tronje (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du bist aber schon arg fantasielos.
Ist doch das gleiche Prinzip wie vorhin!

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das hier

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

nicht naheliegend?

Autor: Dominic R. (dominic)
Datum:

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

Gruss,

Dominic

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: van Tronje (Gast)
Datum:

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

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.