Seite 1 von 1

Zu einer Zahl das optische Pendant im Hexadezimalsystem

Verfasst: 27.11.2013 02:00
von KeyKon
Nun, wie die Überschrift schon sagt suche ich eine Möglichkeit möglichst Effizient eine Binärzahl so umzuwandeln dass ihre Hexadezimalschreibweise der Dezimalzahl gleicht.
Meine Frage ist, geht das überhaupt sonderlich effizient (auf mathematischem Weg), bin da nicht so das Genie *g*?
Gerne darf ein Beispiel auch in ASM sein.
Einsatz soll wohlgemerkt nicht vorrangig in PB sein sondern für einen Microcontroller (8-Bit), ich suche hier in erster Linie einen Denkanstoß, oder ein: Nein geht nicht.

Beispiel:

Code: Alles auswählen

%0000 1110 -> %0010 100
14         ->       $14
Beispielcode der das über den Umweg String macht:

Code: Alles auswählen

number = %0011000000111001

hexNumber = Val("$"+Str(number))

Debug Str(number)+" -> $"+Hex(hexNumber)
LG KeyKon

Re: Zu einer Zahl das optische Pendant im Hexadezimalsystem

Verfasst: 27.11.2013 02:24
von NicTheQuick
Du meinst sowas?

Code: Alles auswählen

Procedure.i dec2hex_optical(dec.i)
	Protected result.i, mult.i = 0
	While dec
		result + (dec % 10) << mult
		dec / 10
		mult + 4
	Wend
	ProcedureReturn result
EndProcedure
Procedure.i hex2dec_optical(hex.i)
	Protected result.i, mult.i = 1
	While hex
		result + (hex & $f) * mult
		hex >> 4
		mult * 10
	Wend
	ProcedureReturn result
EndProcedure

number.i = %0011000000111001
hexNumber.i = dec2hex_optical(number)
numberRev.i = hex2dec_optical(hexNumber)
Debug Str(number) + " -> $" + Hex(hexNumber) + " -> " + Str(numberRev)
//Edit: Shift statt Multiplikation benutzt und Rücktransformation hinzugefügt.

Re: Zu einer Zahl das optische Pendant im Hexadezimalsystem

Verfasst: 28.11.2013 03:12
von KeyKon
Genau sowas meinte ich :)
Und gute Idee mit dem Shift, da spart man sich einiges.
Darum jede Stelle einzeln abzuarbeiten kommt man also vermutlich nicht rum, oder?

LG KeyKon