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

标签 c++ file matlab fstream

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

x=rand(1,60000);
fID=fopen('Data.txt','w');
fwrite(fID,x,'float');
fclose(fID);

然后,当我尝试使用以下代码在 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;
}

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

编辑:循环代码很乱,因为我不想要无限循环,而且 eof 标志从未被设置。

最佳答案

使用 << 格式化 I/O和 >>确实以文本形式读写数值。

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

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

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

关于c++ - 如何从 C++ 文件中读取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13610932/

相关文章:

c++ - 多态记录器(虚拟模板函数?)

android - 使用 libvpx x86 android 构建项目失败并出现 undefined reference 错误

java - 将文件加载到内存中(Java)?

c++ - 为什么在 OpenCV 中访问此矩阵时出现内存错误?

c++ - 抽象工厂模式中将工厂方法插入哪里?

c# - 为什么空文本文件包含 3 个字节?

c++ - 写入文件时检查错误

matlab - 有人可以解释这段代码以及 HEAD 的确切用途吗?

matlab - 将matlab代码转换为c代码

matlab - 如何在pcshow Matlab中设置视角?