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

Cri*_*ian 57 python floating-point

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

tzo*_*zot 83

>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\x0fI@'
>>> struct.unpack('f', b'\xdb\x0fI@')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于4或8字节浮点数.10字节浮点数怎么样? (4认同)
  • @startec问题是关于4字节浮点数.哪个字符串以逗号结尾?只有`struct.unpack`中的元组才有逗号. (4认同)
  • 注意:要查看字节数组的各个字节(由b表示),请使用`list()`。例如:`list(struct.pack('f',3.141592654))`返回单个字节的列表为[[219,15,73,64]`。这非常方便。 (2认同)

NDM*_*NDM 12

只是一点点补充,如果你想要一个浮点数作为解包方法的输出而不是元组,只需写

>>> [x] = struct.unpack('f', b'\xdb\x0fI@')
>>> x
3.1415927410125732
Run Code Online (Sandbox Code Playgroud)

如果你有更多的浮点数,那么就写

>>> [x,y] = struct.unpack('ff', b'\xdb\x0fI@\x0b\x01I4')
>>> x
3.1415927410125732
>>> y
1.8719963179592014e-07
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 或者,您可以引用 RHS `x = struct.unpack('f', b'\xdb\x0fI@')[0]` 上的列表位置 (2认同)