当前位置:C++技术网 > 资讯 > 文本文件与二进制文件,二进制流和文本文件流详解

文本文件与二进制文件,二进制流和文本文件流详解

更新时间:2015-11-25 23:11:46浏览次数:1+次

所谓文本文件就是指在文件中存储的都是字符,比如一个字符串123在文本文件中存储的都是其ASCII的形式,也就是每个字符的ASCII的形式:31 32 33 (这是该字符串的十六进制形式);所谓二进制文件的存储形式就是二进制,对于一个字符串123在二进制文件中的存储形式是将其ASCII码转换为二进制的形式:其ASCII是31 32 33然后将该ASCII码转换为二进制,也就是:00011111 00100000 00100001 的形式。而对于一个整型数据123在二进制文件中的存储的是123的二进制形式:00000000 00000000 00000000 01111011,(ASCII字符集一个字节8位)。那么请你告诉我,这个整型数据在文本文件中占几个字节?在二进制文件中占几个字节?如上面所说,文本文件中存储的是字符,那么,123有几个字符?三个!那么二进制文件中,123有几个字符?我们知道在ASCII字符集中一个字符就是一个字节,unicode字符集中一个字符两个字节。现在在二进制文件123有几个字节?四个!为什么?请你告诉我123是不是整型,那么整形是几个字节?这就是二进制文件与文本文件存储字节的差异!(前提是ASCII字符集)整型123456789在文本文件中是9个字节,二进制文件中则是四个字节!
数5678在文本文件中的存储是00110101  00110110  00110111   00111000 (四个字节)
数5678的存储形式为:二进制:     00010110   00101110 (两个字节)(在这里我们不考虑他的类型,就单单是一个数,以不同的形式在内存中的存储形式,数5678如何转换成二进制?直接除2取余,就能得到了!)。
首先,Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“ <回车><换行>”,即“ \r\n”;Mac系统里,每行结尾是“<回车>”。一个文件以文本流的方式打开,那么文件中连续存储的0D 0A组合会被转换为一个字符0A ,也就是一个换行符!!如果一个文件以二进制流的方式打开的话则不会出现上述的那种情况,而是一个字符一个字符的读取,也就是说有多少个字符我就读多少一个字符,我才不管连续存储的0D 0A组合要转换为一个字符0A。遇到了这个组合就直接读取0D 0A 。