Python 将二进制数据转换为 64 位浮点数。 “错误:解包需要 4 个字节的缓冲区”
Posted
技术标签:
【中文标题】Python 将二进制数据转换为 64 位浮点数。 “错误:解包需要 4 个字节的缓冲区”【英文标题】:Python converting binary data to 64-bit floating point. "error: unpack requires a buffer of 4 bytes" 【发布时间】:2022-01-18 02:43:31 【问题描述】:我正在尝试使用十六进制表示转换二进制文件: 4187D78400000000。这具有 50000000 的 64 位浮点值(大端序)。
但是,当我尝试使用以下方法解压结构时:
sample_freq = byte[8:16]
print(sample_freq)
sample_freq = struct.unpack('f', byte[8:16])
print(sample_freq)
我收到以下错误:
b'A\x87\xd7\x84\x00\x00\x00\x00'
Traceback (most recent call last):
File "C:XXXXX", line 32, in <module>
sample_freq = struct.unpack('f', byte[8:16])
error: unpack requires a buffer of 4 bytes
【问题讨论】:
【参考方案1】:如果您使用字符f
来解包该值,它将尝试读取一个 32 位浮点数。要解码 64 位值,您应该使用字符 d
将其读取为双精度值。
所以这应该是正确的做法:
sample_freq = byte[8:16]
print(sample_freq)
sample_freq = struct.unpack('d', byte[8:16])
print(sample_freq)
【讨论】:
以上是关于Python 将二进制数据转换为 64 位浮点数。 “错误:解包需要 4 个字节的缓冲区”的主要内容,如果未能解决你的问题,请参考以下文章