ctypes将指针传递给结构中的字段

Mic*_*ael 4 python struct ctypes pointers

我需要在Python中构造以下数据类型以传递给C函数:

struct {
  unsigned a,b,c;
  char data[8];
};
Run Code Online (Sandbox Code Playgroud)

但是,我需要实际将指向数据字段的指针传递给函数,而不是指向结构的指针,我无法弄清楚如何执行此操作.

这是我到目前为止:

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)
Run Code Online (Sandbox Code Playgroud)

现在在CI中有这个功能:

int external_c_function(char *data) {
  int a = ((unsigned *)data)[-1];
  int b = ((unsigned *)data)[-2];
  int c = ((unsigned *)data)[-3];
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题是,当函数被调用时,"data"正确地指向"ABCDEFGH",但是当我尝试获取其前面的其余struct数据时,它就是垃圾.我究竟做错了什么?mystruct不是像真正的C结构那样在内存中按顺序存在吗?我怀疑阵列发生了一些有趣的事情:我实际上是在做这样傻事吗?

struct {
  unsigned a,b,c;
  char *data; // -> char[8]
};
Run Code Online (Sandbox Code Playgroud)

如果是这样,我该怎么做呢?

Mar*_*nen 5

您可以使用元素的偏移量通过引用将指针传递给结构的元素:

external_c_function(byref(mystruct,MyStruct.data.offset))
Run Code Online (Sandbox Code Playgroud)