C++ 如何从C++;?
我的主要问题是如何从非char数据类型的文件中读取数据。 我正在从MATLAB编写一个数据文件,如下所示: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() {
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。