www.mikrocontroller.net

Forum: Compiler & IDEs itoa nicht in stdlib.h vorhanden


Autor: Buddler B. (buddler) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe auch probiert die Funktion itoa() zu verwenden, muss aber 
feststellen, dass die gar nicht in meiner stdlib.h-Datei vorhanden ist 
(Ich verwende AVR32 Studio 2.1). Auch die stdio.h hilft zu keinem 
Erfolg.
Wie kann ich die Funktion nachträglich einbinden?
(Bzw. warum ist die itoa manchmal anscheinend integriert und manchmal 
nicht?)

Autor: Bertram S. (bschall)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
srintf(string,"%d",value);

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch es mit strtol. itoa ist verboten ;-)

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry sprintf oder besser snprintf

Autor: Buddler B. (buddler) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, danke, so funktioniert es (mit sprintf und snprintf) :)

Warum ist eigentlich itoa verboten?

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Buddler B. (buddler) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ha... jetzt muss ich trotzdem gleich noch einen hintendran hängen:
Man kann ja bei den sprintf-Ausgaben auf diversteste Art und Weise 
formatieren.

In folgendem Beitrag geht es unter anderem um mein Problem (anständige 
Kommazahlen ausgeben, aber mit Dezimalzahlen rechnen):
Beitrag "Re: Float-Berechnung auf 8051 mit SDCC"

Dort hat es den Anschein, als könnte man beliebig auch eine Dezimalzahl 
formatieren (und ihr quasi Kommastellen verpassen oder ein Komma mitten 
reinbraten.)
Ich habe also, wie im erwähnten Thema empfohlen, mit Integerwerten 
gerechnet und bekomme so für 3,3V (1023) 3297 heraus. Ich möchte jetzt 
also daraus eine Kommazahl basteln.
>sprintf (wort, "Z ist %4.3d", ((zahl*3223)/1000)); // geht noch nicht
>print_lcd(wort, 1);

... und merke schon beim Tippen, dass z.B. 820 (0,82 V) problematisch 
wird.

Hmm... bei fehlen von anderen Möglichkeiten, sehe ich mich gezwungen, 
den Controller als Geisel zu nehmen und mit
>sprintf (wort, "Z ist %4.3f", (((float)zahl)/1024)*3.3);
>print_lcd(wort, 1);
zu foltern.
;-)

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehts um den SDCC oder GCC ?

Beim SDCC kannst Du printf_fast_f verwenden mit %f

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>sprintf (wort, "Z ist %4.3d", ((zahl*3223)/1000))
  geht logischerweise nicht: Ganzzahlen haben keine Nachkommastellen
Probier's so:
sprintf("Z = %4d.%03d", zahl/1000, zahl%1000);

hth. Jörg
ps.: das hätte definitiv in einen anderen/neuen Thread gehört

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.