我将一个uint8类型的整数数组从MATLAB传递给MEX函数。我如何阅读这些值?我尝试使用:
int *n;
n = (int * ) mxGetData(prhs[0]);
但是价值观就像垃圾一样。我也试过
double *n;
n= mxGetPr(prhs[0]);
并且在这种情况下也会出现垃圾值。
这是什么解决方案?
基本上我想读取MEX函数中的整数值,但mxGetPr
返回double类型。
答案 0 :(得分:10)
看看演示MEX-function 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 :(得分:1)
你应该确保你读取的字节数和这些字节的解释在输入数据(来自Matlab)和输出数组(你在mex函数中读入的数组)中是相同的)。由于uint8
长度为8位,double
和int
都将读取错误的字节数,并错误解释这些字节。
尝试包含stdint.h
标头,并对您所读取的阵列使用uint8_t
数据类型。