如何在MEX函数中读取整数数组

时间:2011-06-06 06:42:48

标签: matlab mex

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

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

但是价值观就像垃圾一样。我也试过

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

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

这是什么解决方案?

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

2 个答案:

答案 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位,doubleint都将读取错误的字节数,并错误解释这些字节。

尝试包含stdint.h标头,并对您所读取的阵列使用uint8_t数据类型。