Forum: Mikrocontroller und Digitale Elektronik sprintf formatierungsparameter


von Thorsten S. (whitejack)


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

von 123 (Gast)


Lesenswert?

Hallo

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

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

von Karl H. (kbuchegg)


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

von Thorsten S. (whitejack)


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...

von Frank M. (ukw) (Moderator) Benutzerseite


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

von Thorsten S. (whitejack)


Lesenswert?

....stimmt, an itoa habe ich nicht gedacht...

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

gruß,
thorsten

von 123 (Gast)


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
}

von Karl H. (kbuchegg)


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!

von Thorsten S. (whitejack)


Lesenswert?

ltoa habe ich schon ergoogelt...

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

Gru0,
Thorsten

von Karl H. (kbuchegg)


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.

von Thorsten S. (whitejack)


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

von Stefan E. (sternst)


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.

von Thorsten S. (whitejack)


Lesenswert?

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

danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.