Wie konvertiert man die folgende Hex-Zeichenkette in Python in Float (einfache Genauigkeit 32-Bit)?
"41973333" -> 1.88999996185302734375E1
"41995C29" -> 1.91700000762939453125E1
"470FC614" -> 3.6806078125E4
Wie konvertiert man die folgende Hex-Zeichenkette in Python in Float (einfache Genauigkeit 32-Bit)?
"41973333" -> 1.88999996185302734375E1
"41995C29" -> 1.91700000762939453125E1
"470FC614" -> 3.6806078125E4
Meine Damen und Herren... Seht her:
class fl:
def __init__(this, value=0, byte_size=4):
this.value = value
if this.value: # speedy check (before performing any calculations)
Fe=((byte_size*8)-1)//(byte_size+1)+(byte_size>2)*byte_size//2+(byte_size==3)
Fm,Fb,Fie=(((byte_size*8)-(1+Fe)), ~(~0<<Fe-1), (1<<Fe)-1)
FS,FE,FM=((this.value>>((byte_size*8)-1))&1,(this.value>>Fm)&Fie,this.value&~(~0 << Fm))
if FE == Fie: this.value=(float('NaN') if FM!=0 else (float('+inf') if FS else float('-inf')))
else: this.value=((pow(-1,FS)*(2**(FE-Fb-Fm)*((1<<Fm)+FM))) if FE else pow(-1,FS)*(2**(1-Fb-Fm)*FM))
del Fe; del Fm; del Fb; del Fie; del FS; del FE; del FM
else: this.value = 0.0
print fl( 0x41973333 ).value # >>> 18.899999618530273
print fl( 0x41995C29 ).value # >>> 19.170000076293945
print fl( 0x470FC614 ).value # >>> 36806.078125
print fl( 0x00800000 ).value # >>> 1.1754943508222875e-38 (minimum float value)
print fl( 0x7F7FFFFF ).value # >>> 340282346638528859811704183484516925440L (maximum float value)
# looks like I've found a small bug o.o
# the code still works though (the numbers are properly formatted)
# the result SHOULD be: 3.4028234663852886e+38 (rounded)
print fl( 0x3f80000000, 5 ).value # >>> 1.0
Entschuldigung für das kleine ".value" am Ende...
Dieser Code wird seit fast 2 Jahren als Klasse in meinem Programm verwendet.
(mit ein wenig Bearbeitung können Sie daraus leicht eine Funktion machen)
Dank an PyTony drüben bei DaniWeb für den Code.
im Gegensatz zum nicht-dynamischen Rechnen,
der Code ist nicht fest auf eine feste Float-Größe verdrahtet,
und funktioniert mit jeder Byte-Größe.
Allerdings müssen wir wohl noch ein paar Fehler beseitigen. XDD
(Ich werde diesen Code später (wenn ich kann) mit dem Update bearbeiten)
Aber im Moment ist noch alles gut...
Ich hatte bisher keine Probleme, 3D-Spielemodelle damit zu konvertieren :)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.