как прочитать целочисленный массив в MEX-функции

#matlab #mex

#matlab #mex

Вопрос:

Я передаю целочисленный массив типа uint8 из MATLAB в MEX-функцию. Как мне прочитать эти значения? Я пытался использовать:

 int *n;
n = (int * ) mxGetData(prhs[0]);
  

но значения выводятся как мусор. Я также пытался

 double *n;
n= mxGetPr(prhs[0]);
  

и в этом случае также появляются ненужные значения.

Каково решение этого?

В принципе, я хочу прочитать целочисленное значение в MEX-функции, но mxGetPr возвращает тип double.

Ответ №1:

Взгляните на демонстрационную MEX-функцию explore.c, которую вы можете открыть в MATLAB с помощью

 edit([matlabroot '/extern/examples/mex/explore.c']);
  

Там вы найдете множество функций, все имена которых начинаются с analyze_ , а затем типа (например, analyze_uint8 ). В этих функциях вы увидите, что выходные данные вызовов mxGetData преобразуются к определенному типу C, например, так:

 pr = (unsigned char *)mxGetData(array_ptr);
  

pr теперь указывает на действительную часть array_ptr , массив unsigned char .

Ответ №2:

Вы должны убедиться, что количество прочитанных вами байтов и интерпретация этих байтов одинаковы во входных данных (которые поступают из Matlab) и в выходном массиве (массив, в который вы считываете в функции mex). Поскольку uint8 имеет длину 8 бит, оба double и int будут считывать неправильное количество байтов и неверно интерпретировать эти байты.

Попробуйте включить stdint.h заголовок и использовать uint8_t тип данных для массива, в который вы читаете.