Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C+;中的.mat文件读取变量+;_C++_Matlab_Visual Studio 2010_Mat File - Fatal编程技术网

C++ 从C+;中的.mat文件读取变量+;

C++ 从C+;中的.mat文件读取变量+;,c++,matlab,visual-studio-2010,mat-file,C++,Matlab,Visual Studio 2010,Mat File,我正在制作一个程序,在其中,我在matlab中进行一些处理,然后使用matlab中的以下命令将结果保存在.mat文件中 save data x; 假设x=2 现在我在Visual Studio 2010中从C++程序中读取相同的DATA文件。我的程序正在编译,我也能很好地读取数组的名称及其维数,。。现在的问题是,当我使用下面的命令时,我无法读取x的精确值。每次运行程序时,它都会显示一些随机值 variable = matGetNextVariable(pmat, &name); 现在

我正在制作一个程序,在其中,我在matlab中进行一些处理,然后使用matlab中的以下命令将结果保存在.mat文件中

save data x;
假设x=2

现在我在Visual Studio 2010中从C++程序中读取相同的DATA文件。我的程序正在编译,我也能很好地读取数组的名称及其维数,。。现在的问题是,当我使用下面的命令时,我无法读取x的精确值。每次运行程序时,它都会显示一些随机值

variable = matGetNextVariable(pmat, &name);
现在变量的值=50779048

请指导我在哪里犯错误。变量的值应该是2,因为我从matlab cammand中保存了2

我已经查过这个问题了,但似乎没有人回答,


谢谢。

在再次进行大量搜索后,我找到了答案。有人已经用不同的方式问了这个问题,下面是答案的链接。我希望它能帮助别人。

默认情况下,MATLAB将整数写入双精度浮点,而不是整数。这可能是您的问题,但由于您没有提供代码信息,所以无法确定。另一个解决方案是将.mat文件编写为7.3版(在save调用中添加“-v7.3”)。这将把文件写入HDF5文件,你可以使用成熟的开源HDF5C++ API来读取数据。@贾斯廷谢谢你的回复。我已经更新了问题并包含了我的代码。如果我在代码中遗漏了什么,你能看一下代码吗?
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);
}