gpt4 book ai didi

c++ - iostream 的问题,首先以二进制模式写入文件,然后转换为 ASCII 并保存

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:12 25 4
gpt4 key购买 nike

我正在使用 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[]。这真是令人尴尬。希望这篇文章可以帮助像我这样的初学者。

最佳答案

您似乎保存为 float 并读取为 double。读取(通常)将是写入的两倍大,因此您读取的每一个双倍实际上将读取两个写入的 float 。因此你会得到错误的数字。

尝试改变

double fnum[41616]

float fnum[41616]

此外,最好不要调用二进制文件 *.txt,因为它有点困惑。调用双数组 fnum 也令人困惑 - 因为 f 表示 float

关于c++ - iostream 的问题,首先以二进制模式写入文件,然后转换为 ASCII 并保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com