如何在Python中从套接字接收16位整数元组的数组?

时间:2017-07-07 08:23:36

标签: python

我的Python应用程序需要从C ++应用程序接收一个16位整数元组的数组。

数据由32位无符号整数数组组成,其中每个整数表示一个IQ复数。 I和Q每个都签署了16位数字。

数组大小不变(6000)。

应用程序运行在类似的架构上,所以我不需要担心字节序。

请建议使用Python代码段将套接字中的数据读入IQ元组列表。 (我知道如何创建和连接套接字)。

祝你好运

大卫

2 个答案:

答案 0 :(得分:2)

你可以在python中使用 struct 库,你输入的数据是十六进制字节。

或者如果它们是简单的十六进制数字,则转换是直接的。

如果您能告诉从C ++收到的数据类型以及python中所需的格式,那将非常有用。

答案 1 :(得分:0)

Python有几种处理二进制数据的选项;在这种情况下,您首先从套接字读取,生成不可变字节缓冲区(Python 3中为bytes,Python 2中为str)。这可以使用struct.unpackarray.array

解析为16位字
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)