我将一个uint8类型的整数数组从MATLAB传递给MEX函数.我如何阅读这些值?我试过用:
int *n;
n = (int * ) mxGetData(prhs[0]);
Run Code Online (Sandbox Code Playgroud)
但价值观就像垃圾一样.我也试过了
double *n;
n= mxGetPr(prhs[0]);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,也会出现垃圾值.
这是什么解决方案?
基本上我想读取MEX函数中的整数值但mxGetPr
返回double类型.
SCF*_*nch 10
看看演示MEX-function explore.c,您可以在MATLAB中打开它
edit([matlabroot '/extern/examples/mex/explore.c']);
Run Code Online (Sandbox Code Playgroud)
在那里,你会发现一堆函数,其名称都以字母开头,analyze_
然后是一个类型(例如analyze_uint8
).在这些函数中,您将看到mxGetData
要转换为特定C类型的调用的输出,如下所示:
pr = (unsigned char *)mxGetData(array_ptr);
Run Code Online (Sandbox Code Playgroud)
pr
现在指向的实部array_ptr
,数组unsigned char
.
您应该确保输入数据(来自 Matlab)和输出数组(您在 mex 函数中读入的数组)中读取的字节数以及这些字节的解释相同。由于uint8
是 8 位长,因此double
和int
都会读取错误的字节数,并误解这些字节。
尝试包含stdint.h
标头,并使用uint8_t
您读入的数组的数据类型。