我有一个必须解析的二进制文件,并且正在使用Python。有没有办法占用4个字节并将其转换为单个精度浮点数?
Answers:
>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\x0fI@'
>>> struct.unpack('f', b'\xdb\x0fI@')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
struct.unpack
具有逗号。
float
(单字节,4字节)和C double
(双倍字节,8字节)。蟒蛇float
真的Ç double
。无论存储3.141592654
为C的精度如何,将double
其转换为C float
(通过struct.pack)然后转换回C double
(Python将4字节提取为Cfloat
并将结果转换回C double
/ Python float
)时,它都会丢失。这适用于所有使用IEEE754浮点数的Python实现(CPython确实如此;无论如何,我不知道任何系统上都存在不符合IEEE754的Python实现)。
list()
。例如:list(struct.pack('f', 3.141592654))
返回单个字节的列表[219, 15, 73, 64]
。这非常方便。