最近在研究内存相关的数据存储,发现有些浮点数存在于内存中是一个10位长度的数字,后面研究得知是基于754标准转换到16进制,然后再转为10进制就是10位的长度,所以这里记录下来,方便后续研究。
#!/usr/bin/python3 #coding: utf-8 import struct def float_to_hex(f): return hex(struct.unpack('<I', struct.pack('<f', f))[0]) def hex_to_float(h): i = int(h,16) return struct.unpack('<f',struct.pack('<I', i))[0] def double_to_hex(f): return hex(struct.unpack('<Q', struct.pack('<d', f))[0]) def hex_to_double(h): i = int(h,16) return struct.unpack('<d',struct.pack('<Q', i))[0] print(float_to_hex(13.3)) print(hex_to_float("0x4154cccd")) print(double_to_hex(13.3)) print(hex_to_double("0x402a99999999999a"))
如果需要将浮点转为10进制可以直接使用下面进行直接转换
print(int(float_to_hex(13.3), 16))
打印
1096076493