python将浮点数基于754标准的16进制转换

最近在研究内存相关的数据存储,发现有些浮点数存在于内存中是一个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


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/997.html