Hallo, ich habe ein Problem mit avr-gcc und dem Umgang mit großen Zahlen. Ich muss einen Wert den ich in Sekunden besitze in Stunden umwandeln und auf einem Display ausgeben. Soweit, so gut. Die Sekunden liegen mir in bis zu vier Hex-Werten vor. Der maximale Wert ist jeweils 0xFF Die Werte lassen sich auch einfach zusammentüddeln: wert1*0x01 + wert2*0x100 + wert3*0x10000 nur spätestens da wird die geschichte ziemlich groß. Dann muss das ganze noch durch 3600 (0xE10) geteilt werden, damit ich meine Stunden hab. Und wenn ich versuche das ganze auf nem Display mit sprintf auszugeben, darf meine variable nicht größer als uint16 sein. Also wie stelle ich das am besten an?
sprintf() sollte eigentlich tabu sein, ausser allenfalls fuer debugzwecke. Ich wuerd mit longint oder longword arbeiten. Also signed oder unsigned 32 bit.
Phil J. schrieb: > Und wenn ich versuche das ganze auf nem Display mit sprintf auszugeben, > darf meine variable nicht größer als uint16 sein. Das wären doch immerhin 65535 Stunden... > Also wie stelle ich das am besten an? Ich vermute mal, dass dein Ansatz irgendwie verkorkst ist. Poste mal deinen Code und sag dort, wo es klemmt...
Sekundenzähler als unsigend long und dann für die Stunden durch 3600 teilen. Den Wert auf uint16 prüfen (wenn wichtig "überlauf" auswerten) und dann in uint16 casten. Wie Lothar bereits schrieb sind dann halt "nur" max.65535 Stunden.
und wiveiel Stellen hinter dem Komma sollen es sein? wenn es nicht 100% genau sein soll, dann könnte man Wert1 ignorieren, nur noch wert2*0x01 + wert3*0x0100... machen und auch nur durch (3600/256) teilen statt durch 3600. Dann hätte man beim Zwischenschritt der Gesamtsekunden schonmal eine Größenordnung weniger...
Ich habs jetzt mit itoa versucht. Das geht auch schon mit mehr Stunden. Aber ich habe bei itoa immer eine kleine Abweichung. Das ist mir auch schon bei einem anderen Projekt aufgefallen. Woher kommt das denn?
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.