hexadezimal zu dezimalzahl

Gast #1102797
hallo,
ich habe ein unsigned long welches ich als Wert übernehmen möchte, sehe 
aber keinen Lösungsansatz welcher schnell und effektiv ist (programmiere 
in C und möchte eigentlich keine Vergleichstabelle anlegen! :(

Ich habe also z.B. die Zahl 0x32 und möchte daraus nun 32dec haben (also 
0x20)

das ganze dann aber mit 4 Byte: 0x12345678 soll dann 12345678dec 
(0x00BC614E) werden.

Das kann doch nicht sein dass das so schwer ist, aber egal wie ich 
rechne, ich finde keinen Lösungsweg - wie Rechne ich das!?
Gast
Ich verseht noch nicht was du wirklich willst, scheinbar verwechselt du 
etwas.


> das ganze dann aber mit 4 Byte: 0x12345678 soll dann 12345678dec
> (0x00BC614E) werden.
Das würde ja heisen das 0x12345678 = 0x00BC614E und dann kann nie sein.

Alles was mit 0x anfängt ist HEX. Der computer rechner es intern in eine 
Zahl. Computer kennen Hex in dem Sinne gar nicht.

123456dez = 0x1E240
0x1234 = 4660
Für 2 Stellen, zb  0x32

   3 * 10 + 2

Jede Stelle einzeln extrahieren und mit einer geeigneten Potenz von 10 
multiplizieren.
Zum extrahieren sind Maskieroperationen mit & hilfreich, sowie 
verschiebeoperationen mittels >>   (am besten unsigned rechnen, sonst 
gibts Ärger mit dem Vorzeichenbit)

Was machst du mit den Hex-Ziffern A, B, C, D, E, F ?

Deine Problemstellung ist aber so ungewöhnlich, dass ich mal stark 
vermute, dass du das falsche Problem löst. Was ist dein wirkliches 
Problem?
Schulabbrecher wrote:

> Ich habe also z.B. die Zahl 0x32 und möchte daraus nun 32dec haben (also
> 0x20)
>
> das ganze dann aber mit 4 Byte: 0x12345678 soll dann 12345678dec
> (0x00BC614E) werden.

Wenn Du den ersten Teil gelöst hast, ist das Ganze mit 4 Bytes einfach 
vier Mal zu wiederholen.

Frage: wie soll z.B. 0x1234A678 konvertiert werden?
                           ^
Und wozu das Ganze?
Summe := 0

do 8 mal:
    temp := linkestes Nibble(wert) >> 28
    summe := (summe * 10) + temp
    wert := wert << 4
ende

Summe enthält jetzt das gesuchte Ergebnis dieser BCD -> 
Binär-Umwandlung.

In der Großrechnerei nennt sich dieses Datenformat "POV" (packed ohne 
Vorzeichen).

Bernhard
Gast
Deine Zahlen sind also in BCD-Darstellung. Jedes Nibble à 4 bit steht 
für eine Dezimalstelle. Der Wert der Zahl ist also

3*10 +2 = 32dec bzw.

((((((1*10+2)*10+3)*10+4)*10+5)*10+6)*10+7)*10+8 = 12345678dec

Um die Zahl vom BCD ins Hex-Format umzurechnen, musst Du also das 
höchstwertige Nibble isolieren, mit 10 multiplizieren, das nächste 
Nibble addieren, usw. Dieses Verfahren nennt man Horner-Schema. Man kann 
die Multiplikation mit 10 auch durch zweimaliges Schieben und Addieren 
ersetzen, wenn Dein Prozesor kein Multiplikationsbefehl hat. Wenn ich 
mich richtig erinnere, gab es beim Z80 dafür einen eigenen Befehl, lang 
ist's her :-).

Gruss
Mike
Gast
die werte A-F gibt es nicht. ( ist sicher gestellt)

es geht um folgendes - ich habe ein altes Gerät in dessen speicher eben 
Werte stehen (diese Werte kann ich nicht beeinflußen).

Bei diesen Werten handelt es sich aber eigentlich um eine dezimalzahl - 
das alte Gerät gibt den Wert falsch aus!
0x12345678 entspricht in Wirklichkeit dem dezimalwert 12.345.678 dez!

ich bekomme also die falschen Werte übergeben
Gast
>Bei diesen Werten handelt es sich aber eigentlich um eine dezimalzahl -
>das alte Gerät gibt den Wert falsch aus!
>0x12345678 entspricht in Wirklichkeit dem dezimalwert 12.345.678 dez!

Du meinst eine BCD Zahl, eine binär-codierte-dezimalzahl.
Die macht aus einem "normalen" Byte von 0..255 eine Zahl von 0..99.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.