当我们试图在程序中读或写文件时,通常有两种模式可用,文本模式(默认)和二进制模式。
二进制模式
写文件,我们只需取到数据的二进制序列,并将其保存到文件中。
读文件,当以二进制的模式读取文件时,无法得知文件内容的结构,我们需要编写解码函数。
11111111 11111111 11011000 11110000 00000000 01100100 01010111 01000101 00000000
当计算机从文件中读取二进制序列时,它没有线索将其解码回原始值。这是我们的用户的责任告诉计算机,例如前 4 个字节代表一个有符号的 int ,接下来的 2 个字节代表一个无符号的 short ,接下来的 3 个字节代表一个 C 字符串,这样计算机就会知道如何解码。
signed int d;
fhand.read(reinterpret_cast<char*>(&d), sizeof(d));
文本模式
写文件,使用文本模式保存可以隐式转换为字符串的一些数据,二进制(100)转换为(字符串 100),隐式写入。
读文件,程序只需要逐字节读取文件,并使用用户指定的解码方法(ascill,utf-8)将每个字节解码到字符。
char d_str[255];
signed int d;
fhand.getline(d_str, 255, delimiter);
d = static_cast<signed int>(atoi(d_str));
总结
文本模式的读取一定要有分隔符来分隔,二进制模式的读取要准确读取字节数。