在mex上使用整数数组

我想将一个整数数组从MATLAB传递给C.我尝试使用类型uint64_T但它一直崩溃。 使用mxGetPr()获取双指针工作正常,但我需要将内容类型转换为整数,并且在每次迭代中这样做可能会很慢。

我在mexFunction中试过这个:

uint64_T *l; l= (uint64_T *)mxGetData(prhs[1]); 

调用此变量的函数具有以下forms:

 void XAction( const double *v, const uint64_T *l, double *w) { for (j=c; j; j--) for (i=r-1; i; i--) w[i] =v[l[r*j +i]] } 

我在类型转换中犯了错误吗?

我已经看到了这个答案: 如何在MEX函数中读取整数数组,但我无法取得进展。

对于l= (uint64_T *)mxGetData(prhs[1]); 为了正常工作,从MATLAB传递到你的mex的数据必须是uint64类型。 确保将uint64数组从MATLAB传递到mex文件。 如果你调用myMex([1 2 3]) ,传递的数组不是整数。 它是双倍的。

您不能通过强制转换指针将double数组转换为int数组。 要么必须从MATLAB传递整数值,要么必须创建一个新的int数组,并通过逐个转换每个值来填充它。 要在MATLAB中将值转换为uint64,可以执行myMex(uint64([1 2 3]))