www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String in Int umwandeln


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Gerät, dass mir eine Liste von Zahlen schickt. Zuerst kommt 
die Anzahl der zu empfangenen Zeichen, Trennzeichen ist 0x20, komma=2E 
und die Zahlen sind ASCII-kodiert. Abgeschlossen wird mit einem 
Nullbyte.
Also z.B. 2, 20, 32,35,39,2E,35, 20, 32, 0
entspricht 259,5 und 2.
Ich suche nach einer effizienten Möglichkeit, diese Zeichenkette mit 
einem AVR zu dekodieren. Die nachkommastellen kann ich entweder 
ignorieren oder (besser) runden.
die üblichen Stringfunktionen helfen leider nicht weiter, da die Zeichen 
linksbündig übertragen werden.
Hat jemand einen Tipp für mich?

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sscanf()? oder erst zerhacken mit einer eigenen zerhackfunktion und dann 
mit atoi()?
mfg mf

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja - also irgendwie wirste wohl selbst einen Parser für solche Strings 
bauen müssen, der Dir den String auseinandernimmt.
- Komma suchen
- dann die einzelnen Bytes nach links bis zum Trennzeichen extrahieren, 
-30 nehmen, und mit der jeweiligen Wertigkeit (10^0, 10^1, ...) 
multiplizieren, und dann zusammenzählen.
- Genau so auch mit den Werten nach dem Komma, oder eben ignorieren, 
oder, wenn man runden will, entsprechend dem Wert in Digit 10^-1 dies 
tun mit dem ganzzahligen Teil.
Eine fertige Funktion wird es wohl (nach meinem Gefühl) für solch 
spezifische Stringformate nicht geben.

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Hat jemand einen Tipp für mich?

Solange Char = Zahl
 Wert * 10 (linksschieben im Zehnersystem)
 Wert + Einzelwert des Chars
Zu Solange

Dann falls Komma
 Wert + 1 falls Zahl > 4
 Rest bis zum Trennzeichen ignorieren

So würd ich ungefähr ansetzen.:-)

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.