sprintf formatierungsparameter

OP #1650199
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
#1650206
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#Formatierungen_mit_printf
Moderator Persönliche Seite #1650210
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
Gast #1650246
Lesenswert?
• ▲
▼
sollte sich sogar mit nem 5 zeiler lösen lassen.
1
char[9] buffer;
2
uint33_t data = 12345678;
3

4

5
buffer[8] = 0x00; // endterminierung
6
for (int i = 0; i < 8; i++ )
7
{
8
   buffer[7-i] = '0' + (data%10);
9
   data = data/10;
10
}
#1650263
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!
OP #1650288
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
#1650295
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.