Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (C+;+;)将任意文件作为二进制文件读取,并将数据作为单独的文本文件输出_C++ - Fatal编程技术网

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

C++ (C+;+;)将任意文件作为二进制文件读取,并将数据作为单独的文本文件输出,c++,C++,我试图获取一个任意文件,将其作为原始二进制文件读取,然后将数据作为单独的文本文件输出。对于输入文件的格式或编码,不能做出任何假设。我所做的(非常)粗略: 当前问题: 这段代码以二进制模式打开MyInputFile.txt,但每次读取一个字符(字节!)到名为pDataBlock的C字符串中。然后将此C字符串一次写入一个字节的MyOutputFile.txt 糟糕的解决方案: 我现在的解决方案是在上述代码中插入以下步骤:(1)读取输入文件的单个字符,(2)将此字符转换为整数,(3)将整数转换为二进制

我试图获取一个任意文件,将其作为原始二进制文件读取,然后将数据作为单独的文本文件输出。对于输入文件的格式或编码,不能做出任何假设。我所做的(非常)粗略:

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

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


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

没错,流不能以小于一个字节的粒度运行运算符。你现在的解决方案没有那么糟糕。您可以通过一次读取多个字节来改进它,但无法从文件流中一次读取一位。

您想做什么?创建文件副本?我不明白问题的全部意思。那么你只是想把一个文件的内容复制到另一个文件中?-1忘记说明目的,忘记提出问题,+对已经尝试过的内容的描述令人困惑,并且带有错误的断言,所以你会读,比如说,0xad(1字节),你想输出“0xad”(4字节)?或者您想丢弃无法打印的字符(0x20-0x7f之外)?你需要更好地描述你想要什么。为什么在文件读取函数中需要位级操作?
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);
 }