www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik itoa() / dtostrf() oder sprintf() zur Integer- / Floatwandlung


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um Daten von integer bzw. float in einen String zu wandeln, unm diesen 
dann auf ein LCD Display auszugeben. - (ich nutze die Lib von Peter 
Fleury)

Sollten man da besser die itoa() bzw. dtostrf() oder die sprintf() 
Funktion benutzen?

Danke Andreas

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

Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:

> Sollten man da besser die itoa() bzw. dtostrf() oder die sprintf()
> Funktion benutzen?

Die Frage kann man so nicht beantworten.
Es hängt auch von den Rahmenbedingungen ab, was "besser" ist.

sprintf bietet die meisten Möglichkeiten, kostet dafür aber auch den 
meisten Programmcode und ist die langsamste Möglichkeit. Wenn die 
Nachteile sich in einer Applikation nicht auswirken und man die Vorteile 
nutzen kann, spricht nichts dagegen diese Funktion auch zu verwenden.

Was ist besser um von A nach B zu kommen
Rad, Bahn, Bus, PKW, LKW

Kann man nicht beantworten. Wenn ich von A nach B will, weil ich einen 
Wohnungsumzug mache, wird ein Rad eher suboptimal sein. Wenn ich spät 
drann bin und erst auf den Zug warten muss, wird Bahn und Bus eventuell 
suoptimal sein, ein Rad aber nicht zu schlagen sein, wenn A nur 100 
Meter von B entfernt ist, etc.

Kurz und gut: Kenne deinen Werkzeugkasten und nimm das Werkzeug, welches 
dem Einsatzzweck angemessen ist.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Karl Heinz

ich fange leider erst gerade mit dem Radfahren an! ;)

Wenn ich ein WORD wandeln möchte muss ich sprintf() nehmen?
Bei iota() bekomme ich auf jedenfall -1.

Gruß, Andreas

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas (Gast)

>Wenn ich ein WORD wandeln möchte muss ich sprintf() nehmen?

Nein.

>Bei iota() bekomme ich auf jedenfall -1.

Dann stimmt was nicht.

MFG
Falk

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Sollten man da besser die itoa() bzw. dtostrf() oder die sprintf()
>> Funktion benutzen?

Am besten nichts davon. Rechnen in "c" hats in sich und daher empfehle 
ich Dir mal ein paar kleine Rechnereien auszutesten. Am besten geht das 
auf dem PC oder du machst dir eine Ausgabe über USART aufs Terminal. 
Dann beginnst Du mit deinen Matheübungen und schaust mal mittels printf 
was dabei so herauskommt.

In 99.9% aller Fälle brauchst Du keine Lib Funktionen zur Ausgabe von 
ein paar Zahlen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael M. (technikus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd N schrieb:
Ich persönlich setze itoa und dtostrf gerne ein. Sie sind deutlich 
platzsparender als sprintf und bieten trotzdem noch den Komfort, ohne 
eigene Routinen schnell was auszugeben.

> Am besten nichts davon. Rechnen in "c" hats in sich und daher empfehle
> ich Dir mal ein paar kleine Rechnereien auszutesten. Am besten geht das
> auf dem PC oder du machst dir eine Ausgabe über USART aufs Terminal.
Ob USART oder LCD ist doch egal. Vorher muß er aus der numerischen 
Variable einen String machen, denn sonst kann er mit einem Terminal nur 
sehr schlecht mitlesen.
Warum es rechnen in C in sich hat, möchte ich auch wissen. Wenn man sich 
im klaren ist, welchen Wertebereich die einzelnen Variablentypen haben, 
sehe ich wenig Gemeinheiten. Ok, casten (explizite Typumwandlung) muß 
man hin und wieder.

Servus
Michael

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er sagt ja das er Anfänger ist und gerade casten und Wertebereich sowie 
einzelnen Variablentypen zu kennen und zu verstehen ist nun mal das a 
und o.

>> Bei iota() bekomme ich auf jedenfall -1.

Das ist ein deutlicher Hinweis das er nicht in C rechnen kann.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke! casten brachte bei der iota() mit der -1 Ausgabe Erfolg!

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

Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:
> Danke! casten brachte bei der iota() mit der -1 Ausgabe Erfolg!

Das war höchst wahrscheinlich die falsche Lösungsmethode

itoa     wenn du einen int hast
utoa     wenn du einen unsigned int hast
ltoa     wenn du einen long hast
ultoa    wenn du einen unsigned long hast


Benutzte die richtige Funktion für den richtigen Zweck und hör auf die 
Dinge zurechtzucasten.

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.