10

我将 uint8 类型的整数数组从 MATLAB 传递给 MEX 函数。如何读取这些值?我尝试使用:

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

但这些值是垃圾。我也试过

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

在这种情况下,垃圾值也会出现。

解决方案是什么?

基本上我想读取 MEX 函数中的整数值但mxGetPr返回双精度类型。

4

2 回答 2

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.

于 2011-06-06T20:38:45.820 回答
1

您应该确保您读取的字节数以及这些字节的解释在输入数据(来自 Matlab)和输出数组(您在 mex 函数中读取的数组)中是相同的。由于uint8是 8 位长,两者double都会int读取错误的字节数,并误解这些字节。

尝试包含stdint.h标题,并使用uint8_t您读入的数组的数据类型。

于 2011-06-06T07:25:45.020 回答