从 mex 中的 matlab 结构中提取数据

Extracting data from a matlab struct in mex

我正在关注 this example,但我不确定自己错过了什么。具体来说,我在 MATLAB 中有这个结构:

a = struct; a.one = 1.0; a.two = 2.0; a.three = 3.0; a.four = 4.0;

这是我在 MEX 中的测试代码 ---

首先,我想确保我传递的是正确的东西,所以我做了这个检查:

int nfields = mxGetNumberOfFields(prhs[0]);
mexPrintf("nfields =%i \n\n", nfields);

它确实产生了 4,因为我有四个字段。

但是,当我尝试提取字段 three 中的值时:

tmp = mxGetField(prhs[0], 0, "three");
mexPrintf("data =%f \n\n",  (double *)mxGetData(tmp)  );

它returns data =1.000000。我不确定我做错了什么。我的逻辑是我想获取字段 three 的第一个元素(因此索引为 0),所以我期望 data =3.00000.

我能得到指点或提示吗?

已编辑

好的,既然你没有提供完整的代码,但你正在进行测试,让我们试着从头开始做一个新的。

在 Matlab 端,使用以下代码:

a.one = 1;
a.two = 2;
a.three = 3;
a.four = 4;

read_struct(a);

现在,创建并编译 MEX read_struct 函数,如下所示:

#include "mex.h"

void read_struct(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    if (nrhs != 1)
        mexErrMsgTxt("One input argument required.");

    /* Let's check if the input is a struct... */
    if (!mxIsStruct(prhs[0]))
        mexErrMsgTxt("The input must be a structure.");

    int ne = mxGetNumberOfElements(prhs[0]);
    int nf = mxGetNumberOfFields(prhs[0]);

    mexPrintf("The structure contains %i elements and %i fields.\n", ne, nf);

    mwIndex i;
    mwIndex j;

    mxArray *mxValue; 
    double *value;

    for (i = 0; i < nf; ++i)
    {
        for (j = 0; j < ne; ++j)
        {
            mxValue = mxGetFieldByNumber(prhs[0], j, i);
            value = mxGetPr(mxValue);

            mexPrintf("Field %s(%d) = %.1f\n", mxGetFieldNameByNumber(prhs[0],i), j, value[0]);
        }
    }

    return;
}

这是否正确打印了您的结构?