我将 uint8 类型的整数数组从 MATLAB 传递给 MEX 函数。如何读取这些值?我尝试使用:
int *n;
n = (int * ) mxGetData(prhs[0]);
但这些值是垃圾。我也试过
double *n;
n= mxGetPr(prhs[0]);
在这种情况下,垃圾值也会出现。
解决方案是什么?
基本上我想读取 MEX 函数中的整数值但mxGetPr
返回双精度类型。
查看演示 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
.
您应该确保您读取的字节数以及这些字节的解释在输入数据(来自 Matlab)和输出数组(您在 mex 函数中读取的数组)中是相同的。由于uint8
是 8 位长,两者double
都会int
读取错误的字节数,并误解这些字节。
尝试包含stdint.h
标题,并使用uint8_t
您读入的数组的数据类型。