在C ++中将ASCII文件转换为二进制格式

时间:2018-04-09 11:41:52

标签: c++

首先,我想表达一下,在网上搜索了很多内容之后,我发现了我的问题,没有找到合适的文章或解决方案来解决我想要的问题。

如标题中所述,我需要将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

感谢您的时间

1 个答案:

答案 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.优化读写(使用更大的数据块读取和写入)。