在Python中将字节转换为浮点数

我有一个二进制文件,我必须解析并使用Python。有没有办法取4个字节并将其转换为单精度浮点数?

0

2 答案

您需要结构体软件包。

0
额外
你可能有一个获胜的投票,但没有添加示例代码...
额外 作者 Mayhem,
添加一些演示代码,我会upvote。
额外 作者 John Mulder,
>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\[email protected]'
>>> struct.unpack('f', b'\xdb\[email protected]')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\[email protected]\x00\[email protected]@\x00\x00\[email protected]'
0
额外
我同意@dplass,其他花车怎么样。而且,为什么在这个字符串的末尾有一个逗号?
额外 作者 Startec,
@startec问题是关于4字节的浮点数。哪个字符串以逗号结尾?只有来自 struct.unpack 的元组才有逗号。
额外 作者 tzot,
@PetrKrampl C float (单个,4字节)和C double (double,8字节)的准确性。 Python float 实际上是C double 。无论将 3.141592654 存储为C double 的准确性如何,当它转换为C float (通过struct.pack),然后返回到C double (Python将4字节提取为C float ,然后将结果转换为C double / Python 浮</代码>)。这适用于所有使用IEEE754浮点数的Python实现(CPython的;无论如何,我不知道任何系统上的任何非IEEE754兼容的Python实现)。
额外 作者 tzot,
注意:要查看bytearray的单个字节(用b'表示),请使用 list()。例如: list(struct.pack('f',3.141592654))[219,15,73,64] 的形式返回单个字节的列表。这非常方便。
额外 作者 Gabriel Staples,
这只适用于4或8字节的浮点数。什么10字节浮游物?
额外 作者 dplass,
我在别处找到了一个参考,谢谢。
额外 作者 dplass,
好的,那两个数字的比较呢? >>> import struct >>> a = 3.141592654 >>>打印一个 3.141592654 >> > a_packed = struct.pack('f',a) >>> b = struct.unpack('f',a_packed)[0] >>> print b 3.14159274101 >>> assert a == b,“A non B” <trace> Traceback(最近一次调用最后一次): “”,第1行,在` AssertionError:一个非B
额外 作者 Petr Krampl,