2017-12-17 120 views
0

나는 this example을 따르고 있습니다. 그러나 내가 무엇을 놓쳤는 지 잘 모르겠습니다. 특히, 내가 MATLAB에서이 구조체가 :mex의 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 개의 필드를 가지고 있으므로 4을 산출한다. 내가 필드 three의 값을 추출하려고 할 때

그러나 :

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

data =1.000000를 반환합니다. 내가 뭘 잘못했는지 모르겠다. 내 논리는 필드 three의 첫 번째 요소 (따라서 인덱스가 0 임)를 가져 오려고하므로 data =3.00000이 될 것으로 예상됩니다.

포인터 나 힌트를 얻을 수 있습니까?

답변

1

당신이 당신의 전체 코드를 제공하지 않은하지만 당신은 테스트 작업을하고 있기 때문에,의 처음부터 새로 만들려고하자,

확인을 편집했다.

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; 
} 

을 올바르게 않는 구조를 인쇄?

+0

첫 번째 제안을 시도했지만 여전히'''data = 1.000000'''를 제공하고있었습니다. 두 번째 제안은 인덱스를 사용해야하므로 시도 할 수 없습니다. 그렇지 않으면 오류가 발생합니다. 오류 : 일치하지 않음 'mxGetFieldNumber'에 대한 호출에 대해 함수가 사용됩니다. – tryingtosolve

+0

첫 번째 제안에서 내 접근 방식과 다른 점은 무엇입니까? – tryingtosolve

+0

@MadPhysicist 그래도 오류가 발생합니다. 왜 나는''''''''''''''지수를 줄 수는없는 것일까 요? 여러 입력을 가질 수 있습니다. – tryingtosolve