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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren