我正在使用iostream从设备收集数据。首先我在ASCII模式下写文件,它运行良好,但是花了很多时间。然后我开始以二进制模式写入并且速度更快。
float dist[41616];
ofstream d_ofs( "numbers.dat",ios::out |ios::app|ios::binary);
// this is from the device API getting distance datas
res = GetDistances (hnd, dist, sizeof dist);
d_ofs.write((char*)&dist,sizeof dist);
d_ofs.close();
收集数据后,我必须将“numbers.txt”中的数据转换为我的导师可读取的txt文件。我假设将二进制原始数据更改为ASCII。所以我先读取文件然后以ASCII格式写入。
我得到了数字,但不幸的是它们不是正确的数字。我猜这个转换过程应该有特殊的格式。但到目前为止我还没有找到解决方案,因为我的编码知识很差。所以任何人都可以给我一个手?非常感谢提前。
这是我的代码:
double fnum[41616]; // here is the mistake,it should be float[]
ifstream in("numbers.dat", ios::in | ios::binary);
in.read((char *) &fnum, sizeof fnum);
MessageBox("Read File done");
ofstream fout("output.txt");
for(int k=0; k<41616; k++) // show values read from file
fout <<dec<<"\t" << fnum[k] ;
in.close();
fout.close();
由此得出结论:
我的愚蠢错误在于数据类型。我在第二部分写了double []而不是float []。真的很尴尬。希望这篇文章可以帮助像我这样的初学者。
答案 0 :(得分:2)
你似乎以浮动和阅读的形式保存为双倍。读取(通常)将是写入的两倍,因此您读取的每两倍实际上将读取两个写入的浮点数。因此,你会得到错误的数字。
尝试更改
double fnum[41616]
到
float fnum[41616]
另外,它可能最好不要调用二进制文件* .txt,因为它有点令人困惑。
调用双数组fnum
也令人困惑 - 因为f建议浮点数