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
Hallo shon mit i versucht oder u (wenn es nicht signed sein muss %8u)? http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
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
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...
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
....stimmt, an itoa habe ich nicht gedacht... ich will immer 8 stellen haben, wie machst du das am schnellstn mit itoa? gruß, thorsten
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 | } |
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!
ltoa habe ich schon ergoogelt... danke für die tips, ich denke ich komme rum... Gru0, Thorsten
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.
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
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.
..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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.