Hallo, ich habe folgendes Problem mit einem ATMEGA128 und WinAVR (libc 1.4.3) und bin schon langsam am verzweifeln: ich habe eine 64bit Integer-Zahl (also unsigned long long) die ich in dezimaler Form als String ausgeben möchte. Mit sprintf(string, "%llu", big_int); kriege ich zwar ein ergebnis, aber die Zahl ist immer falsch (zb. statt 0 gibt er 16853041 aus). Wobei big_int als unsigned long long int definiert ist. Ich habe es auch schon mit uint64_t und unsigned long long versucht, aber das ändert nichts. Die obige Zeile funktioniert mit char, int und long problemlos (mit entsprechend angepassten '%u' '%lu'), aber ab long long leider nicht mehr. Hat jemand eine Idee woran es liegen könnte oder noch besser, eine Idee wie ich zum gewünschten Ergebnis komme ohne sprintf zu verwenden? Grüße, Björn
> Hat jemand eine Idee woran es liegen könnte
Ja: 64-bit-Datentypen werden von printf() einfach nicht unterstützt.
Die Unterstützung dafür könnte man reinbauen, aber das würde das
Teil heftig aufblähen.
Vielen Dank für die Info, auch wenn ich lieber was anderes gehört hätte ;-) Hat evtl. jemand eine Idee für eine alternative? Ich habe auch schon überlegt die Zahl in 2 'long' aufzuteilen, aber war bisher nicht in der lage sie so umzuformen dass ich als Anzeige von zwei aufeinanderfolgenden 32bit Zahlen in dezimal das selbe Ergebnis erhalte wie (theoretisch) mit einer 64bit Zahl in dezimal. In google hab ich dazu auch nichts gefunden, wahrscheinlich falsch gesucht, denn irgendjemand muss das doch schonmal gemacht haben... Grüße, Björn
Das übliche: Fortgesetzte Division durch 10 mit Restbildung und umdrehen des Strings. http://www.mikrocontroller.net/articles/FAQ#Eigene_Umwandlungsfunktionen Da du unsigned arbeitest, kannst du dir die Behandlung des Vorzeichens sparen :-)
Ahhh....Na klar! Danke für den Tipp! Ich hab viel zu kompliziert gedacht! Grüße, Björn
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.