August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
在内存中,我们可以将整数123表示为一个整型值或者一个字符串值,如下所示:
在第一条语句中,123保存为一个(二进制)数,与所有其他整型值占用相同大小的内存空间(在PC上是4字节,32位)。即便我们处理数值12345,仍然占用4个字节。在第二条语句中,123保存为一个3个字符的字符串。如果我们处理的是12345,则保存为字符串"12345"需占用5个字符(还需要加上管理字符串所需的固定开销)。这种差异如下图所示(可以看到,使用普通的十进制和字符表示方式,不如使用在计算机内部采用的二进制表示方式):
当我们使用字符表示方式时,必须使用特定字符表示数值的结束,就像我们在纸上书写数值一样:123456是一个数,而123456是两个数。在纸上书写,我们使用空格来表示数值的结束。在计算机内存中,我们也可以这么做:
固定长度的二进制表示方式(比如int型值)和变长的字符串表示方式(比如string类型)之间的差别在文件中也有体现。默认情况下,iostream使用字符表示方式。也就是说,istream从文件读取字符序列,并将其转换为所需类型的对象。而ostream将指定类型的对象转换为字符序列,然后写入文件。但是,我们可以令istream和ostream将对象在内存中对应的字节序列简单地复制到文件。这称为二进制I/O,通过在打开文件时指定ios_base::binary模式来实现。下面的例子展示了如何读写二进制整数文件,涉及“二进制”处理的代码后面给出详细解释: ...