python十进制浮点数,转换成十六进制,网上的方法大都是使用的float.hex()方法:
number = 26.3
print(float.hex(number))
输出结果:
0x1.a4ccccccccccdp+4
这种方法得到的数据会将单精度浮点数转换成双精度浮点数,预期中占用四个字节的float数据类型变成了占用八个字节。
这时python有一个第三方库,struct,解决了这个问题,可以把十进制四个字节的float数据转换成十六进制四个字节的数据:
import struct
float_value = 26.3
# 将十进制浮点数转换为十六进制浮点数
byte_representation = struct.pack('f', float_value)
hex_representation = byte_representation.hex()
print("输入的十进制浮点数:", float_value)
print("生成的十六进制浮点数:", hex_representation)
输出结果:
输入的十进制浮点数: 26.3
生成的十六进制浮点数: 6666d241
可以看到转换后的数据还是占用四个字节,同时struct库还提供了解码的方法:
import struct
hex_data = "0x6666d241"
# 将十六进制数据解析为十进制浮点数
decimal_float = struct.unpack('f', bytes.fromhex(hex_data[2:]))[0]
print("输入的十六进制数据:", hex_data)
print("解析后的十进制浮点数:", decimal_float)
输出结果:
输入的十六进制数据: 0x6666d241
解析后的十进制浮点数: 26.299999237060547