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