in einem Datenfeld von 5 Byte habe ich eine 9stellige hexadezimale Zahl. Der niedrigste wert[0], das höchste Digit wert[4]. Diese Zahl muß ich ausgeben (ASCII). Dafür habe ich für jedes Byte eine Schleife zum Hochzählen geschrieben. Logischer Weise funktioniert das auch. Aber wie man sich denken kann, umso größer die Zahl, umso länger dauert die Dekodierung. Die Vervielfachung der Schleife immer um 256 ist das Problem. Bis 20 Sekunden bei einem 50 Millionen dezimalen Wert. Ich brauche mal einen Tipp, wie das schneller geht. Mit Division und Rest oder Addition mit 7 finde ich keine Lösung, weil ich nicht weiß wie man eine so große Zahl softwaremäßig erfassen kann. Als Prozessor habe ich einen mega16. Danke für die Unterstützung Eike
Hallo, also ich würde es anfangen von der zahl z.B. 100.000 abzuiehen ( 0x186A0 ) das so lange bis die zahl kleiner als 0x186A0 ist - schon hast du die erste dezimalstelle. das ganze dann mit 10.000 weiter machen. bis du am ende bei der letzten stelle bist. für deine zahl musst du bei 10000000000 (0x2540BE400) anfangen. die 10,100,1000,10000(dann als hex) kann man ja fest als tabelle hinterlegen. Das abziehen von der esten zahl kann man ja mit sub/subc machen. Damit 11 stellen bei maximal 10 subtraktionen und bei geschätzen 30takten(geschätzt) bist du maxmimal bei 3.300 takten. Ich würde es aber gleich in asm machen. nicht erst mit C anfangen.
Wie sieht deine "9stellige hexadezimale Zahl" denn genau aus? - ist das eine 40Bit Variable? (die 5 bytes bilden eine Variable 0-(2^40)-1) - ist das eine (packed) BCD Zahl? (immer 4 Bits sind eine Dezimalstelle) - ist das was ganz anderes (Datum, Uhrzeit, etc..)? .. poste Code! hth. Jörg
Jörg X. wrote:
> poste Code!
Hat er doch schon :-)
Aber den Code willst du ehrlich nicht sehen. Selten sowas
komplexes für eine so einfache Aufgabe gesehen.
Was aber aus dem Code und der Fragestellung nicht wirklich hervorgeht:
Soll die Ausgabe diese Zahl als Dezimalzahl oder als Hex-Zahl
darstellen?
Klär uns mal auf.
Karl heinz Buchegger wrote: > Jörg X. wrote: > >> poste Code! > > Hat er doch schon :-) > Aber den Code willst du ehrlich nicht sehen. Selten sowas > komplexes für eine so einfache Aufgabe gesehen. > > Was aber aus dem Code und der Fragestellung nicht wirklich hervorgeht: > Soll die Ausgabe diese Zahl als Dezimalzahl oder als Hex-Zahl > darstellen? > > Klär uns mal auf. Nach weiteren Minuten hab ichs rausgefunden: Die Zahl soll dezimal ausgegeben werden. Der Datentyp, der dir weiter hilft heist 'long long' Dort pfriemelst du erst mal deine Bytes hinein und dann gehts zb so weiter, wie Marcus das schon beschrieben hat.
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.