我的Python应用程序需要从C ++应用程序接收一个16位整数元组的数组。
数据由32位无符号整数数组组成,其中每个整数表示一个IQ复数。 I和Q每个都签署了16位数字。
数组大小不变(6000)。
应用程序运行在类似的架构上,所以我不需要担心字节序。
请建议使用Python代码段将套接字中的数据读入IQ元组列表。 (我知道如何创建和连接套接字)。
祝你好运
大卫
答案 0 :(得分:2)
你可以在python中使用 struct 库,你输入的数据是十六进制字节。
或者如果它们是简单的十六进制数字,则转换是直接的。
如果您能告诉从C ++收到的数据类型以及python中所需的格式,那将非常有用。
答案 1 :(得分:0)
Python有几种处理二进制数据的选项;在这种情况下,您首先从套接字读取,生成不可变字节缓冲区(Python 3中为bytes
,Python 2中为str
)。这可以使用struct.unpack
或array.array
tuple_of_ints = struct.unpack('=12000h', data)
array_of_s16s = array.array('h', data)
从那里开始,你仍然只有一维结构,其中奇数和偶数项是你的I和Q值。如果使用numpy,您可以使用ndarray.fromstring或ndarray.frombuffer来创建类似的数组,然后重新整形。
我们也可以单独转换项目,这有点慢:
list_of_complex_numbers = [complex(*struct.unpack('hh',data[i:i+4]))
for i in range(0,len(data),4)]
numpy也能够从文件中读取,因此使用类似文件的套接字,您可以使用numpy.fromfile(socket, numpy.int16, 2*6000)
。