(c++)将任意文件读取为二进制文件,并将数据作为单独的文本文件输出

(C++) read an arbirtrary file as binary and output the data as a separate text file

本文关键字:文件 数据 单独 输出 文本 二进制文件 c++ 任意 读取      更新时间:2023-10-16

我试图采取任意文件并将其读取为原始二进制文件,然后将数据输出为单独的文本文件。不能对输入文件的格式或编码做任何假设。我所做的大致如下:

char *pDataBlock = new char[nLength];
 ifstream InputFile("MyInputFile.txt", ios::in | ios::binary);
 ofstream OutputFile("MyOutputFile.txt"); 
 while (InputFile)
 { 
  InputFile.read(pDataBlock, nLength);
  OutputFile.write(pDataBlock, nLength);
 }  

目前的问题:这段代码以二进制模式打开MyInputFile.txt,但是每次读取一个字符(字节!)到一个名为pDataBlock的c字符串中。然后将这个c字符串一次一个字节地写入MyOutputFile.txt。

糟糕的解决方案:我现在的解决方案是将以下步骤插入到上述代码中:(1)读取InputFile的单个字符,(2)将该字符转换为整数,(3)将该整数转换为二进制字符串,(4)以追加模式将该二进制字符串输出到OutputFile,(5)读取下一个字符直到EOF。

问题似乎是我发现与fstream相关的每个读/写命令都涉及一次取一个字节,并且不允许位级操作。

你是对的,流不能以低于一个字节的粒度进行操作。你现在的解决方案并没有那么糟糕。您可以通过一次读取多个字节来改进它,但是没有办法一次从文件流中读取一个位。