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
相关产品推荐
相关产品推荐

