C++ 如何从C++;?

C++ 如何从C++;?,c++,file,matlab,fstream,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() {

我的主要问题是如何从非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;
}
#包括
#包括
使用名称空间std;
int main()
{
fstream-fin(“Data.txt”,ios::in | ios::binary);
如果(!fin)
{   

Cuth

你需要读写相同的格式。对于这一点,你从MATLAB编写的是一个未格式化的字节序列,这取决于你是否使用同一个系统。你可以把这个未格式化的字节序列读入C++程序(例如使用<代码> STD::ISTRAM::Read())/>但是你不应该考虑数据被存储。


要实际存储数据,您需要了解数据的格式。格式可以是二进制或文本,但您应该清楚字节的含义、显示顺序、数量或如何检测值的结尾等。

使用
格式化的I/O确实可以像文本

大概是,Matlab用二进制格式编写浮点值。如果它使用与C++相同的格式(大多数实现使用标准IEEE二进制格式),那么可以使用未格式化输入读取字节,并将它们重新解释为浮点值,沿着:

float f;  // Might need to be "double", depending on format
fin.read(reinterpret_cast<char*>(&f), sizeof f);
float f;//可能需要为“double”,具体取决于格式
fin.read(重新解释铸件和f),尺寸f;

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

使用
fwrite
不是最好的主意,因为这样会以内部格式写出数据,在您的程序中可能很容易读回,也可能不容易读回

Matlab还有其他写入输出的方法,例如fprintf之类的函数。最好用这种方法写出数据,那么很明显如何将数据读回另一个应用程序中


只需使用
fprintf(fID,“%f\n”,x)
,然后您就可以使用
scanf
在C/C++中读回该值。

编译器会给出一个错误,因为fin.read需要一个字符pointer@user1860611:抱歉,我输入的速度比我想象的要快。它现在应该可以编译了。上面的方法适用于浮点,因为(并非巧合)Matlab和C++使用标准IEEE格式浮点,但是如果MATLAB在一个小的EnDad机器上运行,它可能会在整数上中断,C++ C++程序运行在一个大的Endiad机器上。(matlab使用单引号表示“%f\n”顺便说一句)是的,太多的C/C++,而不是太多的matlab。它看起来就像是C。