有c结构定义
struct Matrix {
int width;
int height;
int** data;
};
如何使用python的ctypes.Struct来定义它?
class Matrix( ctypes.Structure ):
_fields_ = [
( "width", ctypes.c_int ),
( "height", ctypes.c_int ),
( "data", ??? ),
]
我不知道如何定义“数据”的类型。 这里有人帮忙吗?
答案 0 :(得分:1)
int**
的最直译是:
ctypes.POINTER(ctypes.POINTER(ctypes.c_int))
也就是说,它是指向int的指针。
可能更惯用的方式是2D数组:
ctypes.c_int * width * height
,但要做到这一点,你需要知道在数组中有多少元素 - 大小是ctypes中类型的一部分。如果看起来像你事先不知道那个大小(并且它可以改变每个struct的实例),那么指向指针的指针是最好的选择。
要实例化这需要更少的间接 - 当你想要创建数组时,根据定义你将知道它需要多大。所以,你可以这样做:
m.data = (ctypes.c_int * width * height)()
这将为您提供height
长度width
长度数组c_int
。也就是说,它(广泛地)与C ++代码相同:
m.data = new int[width][height];
或者,如果您愿意:
m.data = (int**) malloc(sizeof(int) * width * height)