mikrocontroller.net

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


Autor: Eike Klopfleisch (klopper)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.