Forum: Compiler & IDEs Wandlung einer 9 stelligen Hex-Zahl in BCD-Format bzw ASCII


von Eike K. (klopper)


Angehängte Dateien:

Lesenswert?

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

von Marcus (Gast)


Lesenswert?

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.

von Jörg X. (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.