当我们试图在程序中读或写文件时,通常有两种模式可用,文本模式(默认)和二进制模式。

二进制模式

  • 写文件,我们只需取到数据的二进制序列,并将其保存到文件中。

  • 读文件,当以二进制的模式读取文件时,无法得知文件内容的结构,我们需要编写解码函数。

  1. 11111111 11111111 11011000 11110000 00000000 01100100 01010111 01000101 00000000

当计算机从文件中读取二进制序列时,它没有线索将其解码回原始值。这是我们的用户的责任告诉计算机,例如前 4 个字节代表一个有符号的 int ,接下来的 2 个字节代表一个无符号的 short ,接下来的 3 个字节代表一个 C 字符串,这样计算机就会知道如何解码。

  1. signed int d;
  2. fhand.read(reinterpret_cast<char*>(&d), sizeof(d));

文本模式

  • 写文件,使用文本模式保存可以隐式转换为字符串的一些数据,二进制(100)转换为(字符串 100),隐式写入。

  • 读文件,程序只需要逐字节读取文件,并使用用户指定的解码方法(ascill,utf-8)将每个字节解码到字符。

  1. char d_str[255];
  2. signed int d;
  3. fhand.getline(d_str, 255, delimiter);
  4. d = static_cast<signed int>(atoi(d_str));

总结

文本模式的读取一定要有分隔符来分隔,二进制模式的读取要准确读取字节数。