在编程的时候,对文件进行读取是常有的事。一般都是对.txt文本文件操作,文件存储内容有两种方式,二进制和ASCII(其它编码方式类ASCII)。.txt文件是以ASCII存储的,假如现在有文件1.txt. 里面的内容放的是123。那当fopen("1.txt","r")后,读取里面的三个数,存在char c[3]中,那么输出printf("%c",c[0])时,会输出一个字符1,printf("%d",c[0])时结果会大出意外成了49(这是字符1在ASCII里的编码号)。
至于为什么一个文本里的1会输出不同的方式呢,这一般都是初学者会很容易搞晕的事,不就是1嘛干嘛变来变去。导致这样结果的就是上面提到的编码方式不同,那么在硬盘上到底“1”这个1是怎么样放的呢? 真正的存储方式是00110001(49)。注意上面的两个输出的不同点%c,%d,关键就是在看程序员想怎样输出它,以字符就是1,以数字就是49。这里初学者又晕了为什么1不用00000001,2就用00000010来存储啊?这样多好不容易乱,这样是二进制存储方式,但如果全用二进制方式的话,会发现计算机只能显示数字了,显示不了别的了。我们的世界不光是数字就能显示完的,更多是用到字符。
那怎么样来表达字符呢?这就要用到标准了,ASCII就是国标通用的标准。这里规定00110001(49)以字符读时就是1,当然我们也可以编写标准规定00110001(49)表示的是a(或任何符号)。问题就在于自定义的规定没人去遵守。对于后面的Unicode其实跟ASCII一样的,都是标准而已,标准一样了沟通才不会出错。
在理解了文件存储原理之后,我们就可以自已写文件了,假如生成了一个1.xwy文件,里面简单的放123进去。这里就是关键了,以什么样方式存储进去?如果是二进制,文件在硬盘里存的内容就是00000001 00000010 00000011了。如果是字符就是00110001(49) 00110010(50) 00110011(51)了。读取的时候只要跟存储的方式是一样的,那内容就是正解的。复杂的一点文件其实也是这样的,只不过多了许多其它的内容比如头文件,偏移量等等。再复杂的文件说白了,只要有了它的存储标准,那么就可以简单的用fopen("文件名","r")编程读出了。