Python 组合四个字节并转换为浮点

Python 组合四个字节并转换为浮点,python,byte,pack,unpack,Python,Byte,Pack,Unpack,我在我的问题上找到了许多其他的线索,但没有一条完全符合我的要求,或者我很难重新调整用途 我正在使用一个名为smbus.read_byte()的函数。根据doc,它返回一个long。如果我打印它返回的内容,我会得到一个从0到255的数字 我要做的是执行四次读取,然后组合这些信息生成一个浮点。所以65,203,96,66应该是25.422 有很多关于使用struct包的建议,但是我对如何将结果组合成一个数字,然后将其转换成浮点有点困惑 >>> data = [65, 203, 96

我在我的问题上找到了许多其他的线索,但没有一条完全符合我的要求,或者我很难重新调整用途

我正在使用一个名为smbus.read_byte()的函数。根据doc,它返回一个long。如果我打印它返回的内容,我会得到一个从0到255的数字

我要做的是执行四次读取,然后组合这些信息生成一个浮点。所以65,203,96,66应该是25.422

有很多关于使用struct包的建议,但是我对如何将结果组合成一个数字,然后将其转换成浮点有点困惑

>>> data = [65, 203, 96, 66]
>>> b = ''.join(chr(i) for i in data)
>>> import struct
>>> struct.unpack('>f', b)
(25.422000885009766,)
分解后,
join
行将每个整数值转换为一个字符字节,然后将它们合并为一个字符串,这就是
struct.unpack
所需的输入。测试表明,您的字节是按大端顺序排列的,需要
格式的
解包

Python3区分了字符串和字节字符串,因此上面显示的
join
不起作用。您可以使用
struct
而不是
join
将值组合成一个字节字符串,这在Python 2和Python 3中都适用:

b = struct.pack('4B', *data)
分解后,
join
行将每个整数值转换为一个字符字节,然后将它们合并为一个字符串,这就是
struct.unpack
所需的输入。测试表明,您的字节是按大端顺序排列的,需要
格式的
解包

Python3区分了字符串和字节字符串,因此上面显示的
join
不起作用。您可以使用
struct
而不是
join
将值组合成一个字节字符串,这在Python 2和Python 3中都适用:

b = struct.pack('4B', *data)