我需要在 Python 中构造以下数据类型以传递给 C 函数:
struct {
unsigned a,b,c;
char data[8];
};
但是,我实际上需要将指向数据字段的指针传递给函数,而不是指向结构的指针,而且我不知道该怎么做。
这是我到目前为止所拥有的:
from ctypes import *
class MyStruct(Structure):
_fields_ = [("a",c_uint), ("b",c_uint), ("c",c_uint), ("data",c_char*8)]
mystruct = MyStruct(0,1,8,"ABCDEFGH")
external_c_function(mystruct.data)
现在在 CI 中有这个功能:
int external_c_function(char *data) {
int a = ((unsigned *)data)[-1];
int b = ((unsigned *)data)[-2];
int c = ((unsigned *)data)[-3];
...
}
问题是,当函数被调用时,“数据”正确指向“ABCDEFGH”,但是当我尝试获取它之前的其余结构数据时,它是垃圾。我究竟做错了什么?mystruct 不是像真正的 C 结构一样按顺序保存在内存中吗?我怀疑数组发生了一些有趣的事情:我真的在做这样愚蠢的事情吗?
struct {
unsigned a,b,c;
char *data; // -> char[8]
};
如果是这样,我该如何正确地做到这一点?