小编Tre*_*nam的帖子

c struct的Python ctypes定义

我试图调用Matlab编码器生成的一些c代码.Matlab使用名为emxArray的ac结构来表示矩阵(在此处记录:http://www.mathworks.co.uk/help/fixedpoint/ug/c-code-interface-for-unbounded-arrays-and-structure-fields.html).

struct emxArray_real_T
{
    double *data;
    int *size;
    int allocatedSize;
    int numDimensions;
    boolean_T canFreeData;
};
Run Code Online (Sandbox Code Playgroud)

我几乎没有经验ctypes,我正在努力创建一个等效的结构,然后我可以使用它来传递向量来回传递给c .so中定义的函数.

这是我到目前为止在python中的地方......

class EmxArray(ctypes.Structure):
    """ creates a struct to match emxArray_real_T """

    _fields_ = [('data', ctypes.POINTER(ctypes.c_double)),
                ('size', ctypes.POINTER(ctypes.c_int)),
                ('allocatedSize', ctypes.c_int),
                ('numDimensions', ctypes.c_int),
                ('canFreeData', ctypes.c_bool)]    
Run Code Online (Sandbox Code Playgroud)

但是,如果我定义这个:

data = (1.1, 1.2, 1.3, 1.4)
L = len(data)

x = EmxArray()
x.data = (ctypes.c_double * L)(*data)
x.data = (ctypes.c_int * 1)(L)    
Run Code Online (Sandbox Code Playgroud)

这可行

print len(x.data[:L]) 

for v in x.data[:L]: print v
Run Code Online (Sandbox Code Playgroud)

编辑:我已整理并采纳了Roland的建议,并可以使用提取数据

data_out = x.data[:L] …
Run Code Online (Sandbox Code Playgroud)

python ctypes matlab-coder

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

ctypes ×1

matlab-coder ×1

python ×1