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

在Python 3中将字节数组转换为浮点数组,python,binary,decode,Python,Binary,Decode,我正在将1.0和2.0作为二进制文件从C程序发送到标准输出: float array[2] = { 1.0, 2.0 }; fwrite(&array[0], sizeof(array[0]), sizeof(array) / sizeof(array[0]), stdout); fflush(stdout); Python程序将标准输出读取为: b'\x00\x00\x80?\x00\x00\x00@' 当我尝试将其转换回float时,这是有效的: stru

我正在将1.0和2.0作为二进制文件从C程序发送到标准输出:

    float array[2] = { 1.0, 2.0 };
    fwrite(&array[0], sizeof(array[0]), sizeof(array) / sizeof(array[0]), stdout);
    fflush(stdout);
Python程序将标准输出读取为:

b'\x00\x00\x80?\x00\x00\x00@'
当我尝试将其转换回float时,这是有效的:

struct.unpack('<f', array[0:4]) # 1.0
struct.unpack('<f', array[4:8]) # 2.0
是否可以一次解码整个数组,或者我应该在循环中分别解码每个浮点?

使用struct
基于此函数,
struct.unpack()
函数必须定义一次解包多个值的精确格式。因此,如果您需要使用
struct
模块,那么您要么必须使用format as
来定义格式,Python的struct提供了一些基本工具,但使用起来有点笨拙。
特别是,对于这一点,它必须以Python浮点元组的形式生成所有浮点(每个浮点元组有10个字节的“巨大”对象),然后插入到数组中

幸运的是,Python的
array.array
类本身可以在给定字节对象的情况下填充其值,甚至可以直接从文件中读取


导入数组
数据=b'\x00\x00\x80?\x00\x00\x00@'
arr=array.array('f')
arr.frombytes(数据)
打印(arr)
收益率:

array('f', [1.0, 2.0])
(要直接从文件中读取,请使用
fromfile
方法)

error: unpack requires a buffer of 4 bytes
array('f', [1.0, 2.0])