Python 二进制读文件 转换 float 失败

2020-10-05 11:28:09 +08:00
 woshichuanqilz

python 代码

    sacfile = 'binfile'
    f = open(sacfile, 'rb')
    hdrBin = f.read()[:4]
    print(hdrBin)
    sfmt = 'f'
    hdrFmt = struct.Struct(sfmt)
    m_header = hdrFmt.unpack(hdrBin)

输出结果

b'<\xa3\xd7\n'

但是我用 winhex 查看源文件 第一位是 3C 被转换成 '<' 了 winhex 前八个字节的数据

3CA3D70AC7572000

问题是我需要把前四个 byte 转换为 float 数据, 就是"m_header"

我拿到的结果是错的: 2.0765148849577988e-32

正确的结果应该是: 0.02000000 这个问题怎么解决?

binfile 在这里

https://gitee.com/lovelife_lizhe/ori_data/raw/master/binfile

1234 次点击
所在节点    问与答
4 条回复
lcdtyph
2020-10-05 11:33:23 +08:00
大端续,sfmt 改一下
lcdtyph
2020-10-05 11:33:46 +08:00
大端序
@lcdtyph
woshichuanqilz
2020-10-05 11:42:31 +08:00
@lcdtyph Thanks 已感谢
peonone
2020-10-05 11:44:48 +08:00
是大小端的问题,文件是小端的,你是用大端的格式读出来的,把 sfmt 改成'>f'就能得出你要的结果

至于 3C 和'<', 内容是完全一样的,只是 Python 将 3C 这个字节用 ASCII 的形式展现出来而已 b'<'[0] == int('3C', 16)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX