我有一个必须解析的二进制文件,并且正在使用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]。这非常方便。