如何从C++中读取文件中的数字?

use*_*611 4 c++ matlab fstream file

我的主要问题是如何从不属于char数据类型的文件中读取数据.我正在从MATLAB写一个数据文件,如下所示:

x=rand(1,60000);
fID=fopen('Data.txt','w');
fwrite(fID,x,'float');
fclose(fID);
Run Code Online (Sandbox Code Playgroud)

然后当我尝试使用以下代码在C++中读取它时,"num"不会改变.

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    fstream fin("Data.txt",ios::in | ios::binary);
    if (!fin)
    {   
        cout<<"\n Couldn't find file \n";
        return 0;
    }
    float num=123;
    float loopSize=100e3;
    for(int i=0; i<loopSize; i++)
    {
        if(fin.eof())
        break;

        fin >> num;
        cout<< num;
    }
    fin.close();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以在matlab中读写文件,我可以在c ++中读写,但我不能用matlab编写并用c ++读取.我在matlab中编写的文件是我想要的格式,但是c ++中的文件似乎是在文本中写入/读取数字.你如何从C++文件中读取一系列浮点数,或者我做错了什么?

编辑:循环代码很乱,因为我不想要一个无限循环,并且永远不会设置eof标志.

Mik*_*our 6

格式化I/O使用<<>>确实读取和写入数值作为文本.

据推测,Matlab正在以二进制格式编写浮点值.如果它使用与C++相同的格式(大多数实现使用标准IEEE二进制格式),那么您可以使用未格式化的输入读取字节,并将它们重新解释为浮点值,方法如下:

float f;  // Might need to be "double", depending on format
fin.read(reinterpret_cast<char*>(&f), sizeof f);
Run Code Online (Sandbox Code Playgroud)

如果Matlab不使用兼容的格式,那么你需要找出它使用的格式,并编写一些代码来转换它.