#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
тип данных для массива, в который вы читаете.