sprintf formatierungsparameter

OP #1650199
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
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.