【发布时间】:2016-07-23 19:24:33
【问题描述】:
我正在制作一个程序,我在 matlab 中进行一些处理,然后在 matlab 中使用以下命令将结果保存在 .mat 文件中,
save data x;
假设 x=2,
现在我正在从 Visual Studio 2010 中的 C++ 程序读取相同的 data.mat 文件。我的程序正在编译,我还可以完美地读取数组的名称及其维度,.. 现在问题是当我使用以下命令,我无法读取 x 的确切值。每次我运行程序时,它都会显示一些随机值。
variable = matGetNextVariable(pmat, &name);
现在变量的值 =50779048..
请指导我在哪里犯错。变量的值应该是 2,因为我已经从 matlab cammand 中保存了 2..
我已经检查过这个问题,但似乎没有人回答, Reading .mat file in C++
void main(int argc, char **argv)
{
MATFile *pmat;
const char* name=NULL;
mxArray *pa;
/* open mat file and read it's content */
pmat = matOpen("data.mat", "r");
if (pmat == NULL)
{
printf("Error Opening File: \"%s\"\n", argv[1]);
return;
}
/* Read in each array. */
pa = matGetNextVariable(pmat, &name);
while (pa!=NULL)
{
/*
* Diagnose array pa
*/
printf("\nArray %s has %d dimensions.", name,
mxGetNumberOfDimensions(pa));
//print matrix elements
printf("\ndata %d",pa);
//get next variable
pa = matGetNextVariable(pmat,&name);
//printf("\ndata %d",pa);
//destroy allocated matrix
mxDestroyArray(pa);
}
matClose(pmat);
}
谢谢。
【问题讨论】:
-
默认情况下,MATLAB 会将整数写入双精度浮点数,而不是整数。这可能是您的问题,但由于您没有提供有关代码的信息,因此无法判断。另一种解决方案是将您的 .mat 文件编写为 7.3 版(将“-v7.3”添加到保存调用)。然后,这会将文件写入 HDF5 文件,您可以使用成熟的开源 HDF5 C++ API 来读取数据。
-
@Justin 感谢您的回复。我已经更新了问题并包含了我的代码。如果我在代码中遗漏了某些内容,请您看一下代码吗?
标签: c++ matlab visual-studio-2010 mat-file