Questo è un po 'complicato in Python, perché non si sta cercando di convertire il valore in virgola mobile in un numero intero (esadecimale). Invece, stai cercando di interpretare la rappresentazione binaria IEEE 754 del valore a virgola mobile come esadecimale.
Utilizzeremo le funzioni pack
e unpack
dalla libreria integrata struct
.
A float
è a 32 bit. Per prima cosa inseriamo lo pack
in una stringa binario , quindi unpack
come int
.
def float_to_hex(f):
return hex(struct.unpack('<I', struct.pack('<f', f))[0])
float_to_hex(17.5) # Output: '0x418c0000'
Possiamo fare lo stesso per double
, sapendo che è di 64 bit:
def double_to_hex(f):
return hex(struct.unpack('<Q', struct.pack('<d', f))[0])
double_to_hex(17.5) # Output: '0x4031800000000000L'
1 - Nozione una stringa di byte prime; non una stringa di uno e zero.
fonte
2014-05-13 06:36:54
È questo compito? –
[Come faccio a fare una buona domanda?] (Http://stackoverflow.com/help/how-to-ask) – J0HN
usa 'struct' e quindi estrai i byte. – Anycorn