C++ 在C++;是否包含文本以显示其中包含内容?

C++ 在C++;是否包含文本以显示其中包含内容?,c++,binaryfiles,C++,Binaryfiles,我正在进行一个项目,首先需要将二进制文件转换为字符数组,然后交换每个字母的大小写,然后将更改后的数组添加到另一个输出文件中。但是,当我读取二进制文件数据时,它返回一个空数组,因此没有向swap函数传递任何内容 #include <iostream> #include <fstream> #include <string> using namespace std; int main( ) { char *buf; string str1 = "aba

我正在进行一个项目,首先需要将二进制文件转换为字符数组,然后交换每个字母的大小写,然后将更改后的数组添加到另一个输出文件中。但是,当我读取二进制文件数据时,它返回一个空数组,因此没有向swap函数传递任何内容

#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