首先,我想表达一下,在网上搜索了很多内容之后,我发现了我的问题,没有找到合适的文章或解决方案来解决我想要的问题。
如标题中所述,我需要将ASCII文件转换为二进制文件。
我的文件由行组成,每行包含以空格分隔的浮点数。
我发现许多人使用c ++,因为这种任务更容易。
我尝试了以下代码,但生成的文件非常大。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
char buffer;
ifstream in("Points_in.txt");
ofstream out("binary_out.bin", ios::out|ios::binary);
float nums[9];
while (!in.eof())
{
in >> nums[0] >> nums[1] >> nums[2]>> nums[3] >> nums[4] >> nums[5]>> nums[6] >> nums[7] >> nums[8];
out.write(reinterpret_cast<const char*>(nums), 9*sizeof(float));
}
return 0;
}
我找到了这2个资源:
http://www.eecs.umich.edu/courses/eecs380/HANDOUTS/cppBinaryFileIO-2.html https://r3dux.org/2013/12/how-to-read-and-write-ascii-and-binary-files-in-c/
如果您有其他资源,我感激不尽?
我的ASCII输入文件中的行如下:
-16.505 -50.3401 -194 -16.505 -50.8766 -193.5 -17.0415 -50.3401 -193.5
感谢您的时间
答案 0 :(得分:0)
这是一个更简单的方法:
#include <iostream>
#include <fstream>
int main()
{
float value = 0.0;
std::ifstream input("my_input_file.txt");
std::ofstream output("output.bin");
while (input >> value)
{
output.write(static_cast<char *>(&value), sizeof(value));
}
input.close(); // explicitly close the file.
output.close();
return EXIT_SUCCESS;
}
在上面的代码片段中,使用格式化的读入变量读取float
。
接下来,数字以原始的二进制形式输出。
读取和写入重复,直到没有更多的输入数据。
读者练习/ OP:
1.打开文件时的错误处理
2.优化读写(使用更大的数据块读取和写入)。