我正试图使用MATIO将程序从C++/MEX转换为C++,我想知道MATIO是否有mxGetPr(cal)
和mxGetPi(cal)
的等价物?我在结构typedef struct matvar_t
中看到它有void *data
文件
以下是如何将复杂的替身写入文件:
char* fieldname = "MyComplexDoubleVariable";
double real = 4.2;
double imag = 1.5;
mat_complex_split_t mycomplexdouble = {&real, &imag};
size_t dim[2]={ 1, 1 };
matvar_t *variable = Mat_VarCreate(fieldname, MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dim, &mycomplexdouble, MAT_F_COMPLEX);
Mat_VarWrite(matfp,variable, MAT_COMPRESSION_NONE); //or MAT_COMPRESSION_ZLIB
Mat_VarFree(variable);
所以倒过来工作,我认为这会奏效mat_complex_split_t cal_complex=cal->data;
,但我在编译时遇到此错误
error: conversion from ‘void*’ to non-scalar type ‘mat_complex_split_t’ requested
mat_complex_split_t cal_complex=cal->data;
如有任何帮助,我们将不胜感激。
这是我从mat文件读取复杂数据的代码
我认为应该使用static_cast
来转换void *
以指定类型。
const mat_complex_split_t* xData = static_cast<const mat_complex_split_t*>(matVar->data);
const double* real = static_cast<const double*>(xData->Re);
const double* imag = static_cast<const double*>(xData->Im);
// Read 10 complex num
for (int i = 0; i < 10; ++i) {
std::cout << real[i] << "+ 1j*"<< imag[i] << std::endl;
}