为包含整数数组的结构形成包,在python中创建字符串列表

时间:2017-12-19 11:55:43

标签: python c python-2.7

在C中我们有

struct temp
{
  unisgned int i[10];
  char a[2][10];
}temp;

像这样我在python中创建一个结构:

integer_aray=[1,2,3,4,5]
string_array=["hello","world"]
format_="Qs"
temp = namedtuple("temp","i a")                                      
temp_tuple =  temp(i=integer_array,a=string_array)
string_to_send = struct.pack(format_, *temp_tuple) 

当我尝试像这个python 2.7给出错误

string_to_send = struct.pack(format_, *temp_tuple)
error: cannot convert argument to integer

我必须将python结构作为整数数组和字符串数组发送。我们可以通过发送数组而不使用ctypes来做任何事情吗?

2 个答案:

答案 0 :(得分:1)

如果要打包等效的C结构

struct temp
{
  unsigned int i[10];
  char a[2][10];
};

您将使用格式"10I10s10s",其中10I代表10个本地顺序的4字节无符号整数,每个10s代表一个大小为10的字节字符串。

在Python3中,你可以写:

l = list(range(1, 11))            # [1,2,3,4,5,6,7,8,9,10]
temp = struct.pack("10I10s10s", *l, b"hello", b"world")
print(temp)

它会给(在一个小端的ASCII平台上):

b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00\n\x00\x00\x00hello\x00\x00\x00\x00\x00world\x00\x00\x00\x00\x00'

与32位小端系统上的C temp结构兼容。

答案 1 :(得分:0)

char *a[2][10];是一个2x10指针的2D数组。

您可能打算执行char a[2][10];,这是一个包含2个C字符串的数组,每个字符串长度为9 + 1个字符。或者也许char* a[2],这是两个指向字符的指针(可能是数组)。