在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来做任何事情吗?
答案 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]
,这是两个指向字符的指针(可能是数组)。