hexadezimal zu dezimalzahl

Gast #1102797
Lesenswert?

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 #1102807
Lesenswert?

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
#1102808
Lesenswert?

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?
#1102811
Lesenswert?

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?
Gast #1102818
Lesenswert?

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 #1102826
Lesenswert?

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 #1102847
Lesenswert?

>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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren