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 个字节的缓冲区”的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何将10进制的浮点数转化为16进制数

如何在python中将23位浮点数从字符串转换为浮点数并返回?

浮点数的十六进制表示

32位浮点数二进制转换为int32

将 32 位浮点数转换为 16 位 PCM 范围

将十进制数表示成ieee754标准的32浮点规格化数 27/64