2

我有一个来自 Matlab 的结构传递给 mex。它传递正确,我使用 mxGetClassName(mxArray_pointer_carrying_struct) 验证它,它返回struct作为类类型。该结构有 15 个字段 n 对应的属性,所有 30 个字符串(15 个属性名称,15 个属性值)。

我可以使用 mxGetFieldNameByNumber(mxArray_pointer_carrying_struct, index); 访问属性名称

如何访问属性值?

我必须在上面做的代码如下所示:

extract_settings(const mxArray *p)
{
    mwIndex j = 1;
    const char *property;
    mexPrintf("\nInput Arg %i is of type:%s\n",j,mxGetClassName(p));
    for(int i = 0;i<=14;i++)
    {
        property = mxGetFieldNameByNumber(p, i);  %gets property names
        mexPrintf("%s-- \n",property); %Displays 15 property names
    }
}

我的结构如下所示:

{ 
TRIGGER_POLARITY : LEVEL_LOW
EDGE : EDGE_RISING 
. 
.
. (15 elements as of now)
}
4

1 回答 1

5

您可能正在寻找mxGetFieldByNumber. 还有一个将结构体传递给 MATLAB 附带的 MEX 文件的完整示例,请参阅Mathworks 中的此文档。您可以在 MATLAB 中加载示例,如下所示:

edit([matlabroot '/extern/examples/refbook/phonebook.c']);

编辑:还有mxGetField它可以让您使用其名称访问该字段。

EDIT2:要将结果从转换mxGetField为 C 字符串,您可以使用mxArrayToString. 请注意,您需要在使用字符串后释放它的内存。您可以使用mxIsChar来检查字段是否包含 MATLAB 字符数组。

于 2013-03-01T07:07:04.050 回答