C++ 在C++;是否包含文本以显示其中包含内容?
我正在进行一个项目,首先需要将二进制文件转换为字符数组,然后交换每个字母的大小写,然后将更改后的数组添加到另一个输出文件中。但是,当我读取二进制文件数据时,它返回一个空数组,因此没有向swap函数传递任何内容C++ 在C++;是否包含文本以显示其中包含内容?,c++,binaryfiles,C++,Binaryfiles,我正在进行一个项目,首先需要将二进制文件转换为字符数组,然后交换每个字母的大小写,然后将更改后的数组添加到另一个输出文件中。但是,当我读取二进制文件数据时,它返回一个空数组,因此没有向swap函数传递任何内容 #include <iostream> #include <fstream> #include <string> using namespace std; int main( ) { char *buf; string str1 = "aba
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main( )
{
char *buf;
string str1 = "abababab";
int size1 = (str1.size());
ofstream output ("output.txt", ios::out | ios::binary);
output.write(reinterpret_cast<char *>(&size1), sizeof(int));
output.write(str1.c_str(), size1);
output.flush();
output.close();
return 0;
}
现在这仍然是一个二进制文件吗?如果我让一个程序读取每一组字节,它会正确地输出它们吗
我的问题是文件output.txt
包含文本字符,如下所示
这是意料之中的:您首先编写了一个int
(大概是4个字节),它是^H^@^^@
部分,然后是字符串
现在这仍然是一个二进制文件吗
所有文件都是二进制文件。“文本文件”只是一种表示内容遵循某种文本编码的方式,如UTF-8
如果我让一个程序读取每一组字节,它会正确地输出它们吗
如果您询问保存非文本的字节是否有问题:不,这不是问题。@ADS_Fibonacci
^H^^^^@
表示字节08 00 00
,它是计算机上整数8的二进制形式,即字符串的字符长度“abababab”
那么我在output.txt
中看到的文本只包含字符的二进制形式,没有附加字符的文本形式?@ADS\u Fibonacci没有文本形式。所有文件都是二进制文件,但有些二进制文件基于某些编码对字符进行编码。要分析二进制文件,应该使用十六进制编辑器。如果您使用vi
,它会将不可显示的字符转换为Ctrl代码,如^H^^^^@
读取此代码的代码将首先读取大小,然后将该字节数读取为字符串。应该可以。这并不能解决问题,但您不需要output.flush()
或output.close()代码>。析构函数会这样做。
^H^@^@^@abababab