mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf formatierungsparameter


Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich printe mit sprintf etwas in einen string. nun möchte ich einen 
uint32_t als dezimalzahl in den string printen. der Formatparameter %d 
mit der auffüllung auf 8 Stellen %08d geht scheinbar nur bis signed 16 
bit.

wie kann ich das umschiffen?

Gruß,
Thorsten

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

shon mit i versucht oder u (wenn es nicht signed sein muss %8u)?

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

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

Bewertung
0 lesenswert
nicht lesenswert
Thorsten S. schrieb:
> Hi,
>
> ich printe mit sprintf etwas in einen string. nun möchte ich einen
> uint32_t als dezimalzahl in den string printen. der Formatparameter %d
> mit der auffüllung auf 8 Stellen %08d geht scheinbar nur bis signed 16
> bit.
>
> wie kann ich das umschiffen?

Du kannst diese und andere Fragen zuverlässig umschiffen, indem du dir 
ein C-Buch kaufst. Da stehen diese Dinge und noch viele andere 
zuverlässig drinnen.

%d   ist für int
%ld  ist für long int

http://www.mikrocontroller.net/articles/FAQ#Format...

Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
i geht nicht...

u hábe ich noch nicht getestet...

avr-libc-user-manual.pdf hier bin ich auch nicht´wirklich schlau 
geworden, sprintf ist enthalten, aber nicht die 
formatierungsparameter...

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten S. schrieb:

> ich printe mit sprintf etwas in einen string. nun möchte ich einen
> uint32_t als dezimalzahl in den string printen. der Formatparameter %d
> mit der auffüllung auf 8 Stellen %08d geht scheinbar nur bis signed 16
> bit.

%d ist für Integer (bei AVRs 16 bit).
%ld ist für long Integer (bei AVRs 32 bit).

Warum verwendest Du das speicherintensive sprintf statt das sparsamere 
ltoa()?

Gruß,

Frank

Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
....stimmt, an itoa habe ich nicht gedacht...

ich will immer 8 stellen haben, wie machst du das am schnellstn mit 
itoa?

gruß,
thorsten

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte sich sogar mit nem 5 zeiler lösen lassen.
char[9] buffer;
uint33_t data = 12345678;


buffer[8] = 0x00; // endterminierung
for (int i = 0; i < 8; i++ )
{
   buffer[7-i] = '0' + (data%10);
   data = data/10;
}



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

Bewertung
0 lesenswert
nicht lesenswert
Thorsten S. schrieb:
> ....stimmt, an itoa habe ich nicht gedacht...
>
> ich will immer 8 stellen haben, wie machst du das am schnellstn mit
> itoa?

gar nicht.
Wie der Name schon sagt, ist itoa für int. Für long gibt es ltoa.

Du brauchst wirklich Literatur. Das ist kein Scherz!

Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ltoa habe ich schon ergoogelt...

danke für die tips, ich denke ich komme rum...

Gru0,
Thorsten

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

Bewertung
0 lesenswert
nicht lesenswert
Thorsten S. schrieb:

> danke für die tips, ich denke ich komme rum...

Um Literatur?
Mit Sicherheit nicht!

Ohne wirst du dich ewig mit Halbwissen durch die Programmierung 
schleppen.

Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

dann lass mich das eben erläutern, informationen gibt es ja nun gerade 
zu dem Thema eine ganze Menge:

http://en.wikipedia.org/wiki/Printf

doch wo finde ich Informationen zu dem sprintf das hier auf den AVRs zum 
Tragen kommt. %ld ist nicht standardmäßig mit erwähnt.

Ich habe folgende Bücher hier:

ISBN 3-8266-0410-5 c-buch
ISBN 3-446-19233-6 cpp buch

Sicher würde ich bei so einer Frage erstmal in einem c buch gucken, 
dennoch steht auch hier %ld nicht mit drin.

Wenn du einen brauchbaren tip für literatur in verbindung mit den libs 
auv einem AVR hast, dann her damit.

Gruß,
Thorsten

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten S. schrieb:
> doch wo finde ich Informationen zu dem sprintf das hier auf den AVRs zum
> Tragen kommt. %ld ist nicht standardmäßig mit erwähnt.

Sowohl unter dem von dir geposteten Link, wie auch in der AVR-Libc-Doku 
steht der Format-Modifier "l" mit drin.

> Sicher würde ich bei so einer Frage erstmal in einem c buch gucken,
> dennoch steht auch hier %ld nicht mit drin.

Ich würde drauf wetten, dass es auch dort mit drin steht.
Du musst nur aufmerksamer lesen.

Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..dann ist nicht die Literatur mein problem, sondern das Lesen..

danke

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.