как читать целочисленный массив в MEX-функции - PullRequest
10 голосов
/ 06 июня 2011

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

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

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

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

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

Какое решение для этого?

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

Ответы [ 2 ]

10 голосов
/ 07 июня 2011

Взгляните на демонстрационную 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.

1 голос
/ 06 июня 2011

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

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

...