You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python从二进制解析double异常:struct.unpack返回错误数值求助

解决struct.unpack解析二进制数据得到异常数值的问题

我尝试用下面的代码解析二进制数据,结果返回的是1.9035985675205313e+185,不是预期的98.6,该怎么解决?

import struct
fileContent = b'@X\xa6fffff\x00\x00\x03\xe8\x01'
d = struct.unpack('d', fileContent[:8])
print(d)  # 预期输出98.6

问题原因

你用struct.unpack('d')时,默认采用的是本地字节序(Windows一般是小端,Linux/macOS是大端),但你的二进制数据是按大端序存储的,两者不匹配就会解析出错误的超大数值。另外可以确认:你截取的前8字节b'@X\xa6fffff'刚好是98.6的大端序双精度字节序列,数据本身是正确的,只是解析时字节序没选对。

解决方法

直接在格式符前指定大端序标识>,就能正确解析:

import struct
fileContent = b'@X\xa6fffff\x00\x00\x03\xe8\x01'
# 用大端序解析双精度浮点数
d = struct.unpack('>d', fileContent[:8])
print(d)  # 输出 (98.60000000000001,)

输出的微小误差是浮点数的精度特性,属于正常情况,用round(d[0], 1)就能得到精确的98.6。

如果你的数据是小端序存储的,就把格式符改成<d。相比手动反转字节,直接指定字节序的代码更清晰,也能跨平台运行。

内容的提问来源于stack exchange,提问作者Anchit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:07:33