网站打不开-bios是什么意思
![二进制文件](/uploads/image/0880.jpg)
2023年4月4日发(作者:节电模式)
C语⾔读写⽂件两种⽅式ASCII和⼆进制。
C语⾔读写⽂件有两种⽅式ASCII和⼆进制。现在举例说明:
内存中的字符或字符串都是⽂本模式(unicode编码存储,统⼀长度,定长码,⽅便)
内存中的其他变量都是以⼆进制编码存储
程序的代码以⽂本模式ASCII码⽅式存储
1.在windows系统中,⽂本模式下,⽂件以"rn"代表换⾏。若以⽂本模式打开⽂件,并⽤fputs等函数写⼊换⾏符"n"时,函数会⾃动
在"n"前⾯加上"r"。即实际写⼊⽂件的是"rn"。读取的时候⾃动去掉r,将n写⼊内存。
2.在类Unix/Linux系统中⽂本模式下,⽂件以"n"代表换⾏。所以Linux系统中在⽂本模式和⼆进制模式下并⽆区别。
注:Windows采⽤rn是有原因的,Windows采⽤了传统的英⽂打字机的模式。
想想看英⽂打字机是如何换⾏的呢?英⽂打字机是选择将⼩车退回⾄起点,
这个过程称为回车(carriagereturn,CR),随后把⼩车调⾄下⼀⾏的位
置,这个过程称为换⾏(linefeed,LF),这样就完成了英⽂打字机中换
⾏过程。
回车(CR)在计算机中使⽤ASCII为13的字符来表⽰,换⾏(LF)使⽤
ASCII为10的字符来表⽰。这也就是Windows的换⾏采⽤rn来表⽰
的原因。
3.当⽤⼆进制模式读取windows下代表换⾏的rn时,不能⾃动去掉r,这样读⼊内存的数据多了⼀个‘r’,造成跟在‘r’后⾯的⼆进
制位右移,读取必然会出错!
4.如果在⽂件中读到0x1B,⽂本模式会认为这是⽂件结束符,也就是⼆进制模型不会对⽂件进⾏处理,⽽⽂本⽅式会按⼀定的⽅式对数据
作相应的转换。
5.⽤⽂本模式写⽂件,读取时也要⽤⽂本模式,⼆进制模式同样。
将⼆进制数据直接写⼊到⽂件中
Intx=128;
fp=fopen("g:","wb");
fwrite(&a,4,1,fp);
这时候中的内容如果⽤记事本打开,乱码,因为记事本是按照ASCII编码⽅式(现在系统默认使⽤的都是GB2312unicode等编码)
解释⽂件,⽽128在内存⾥⾯是四字节的0000,这样⽤系统的编码解释肯定出错。
如果将128存储为asii形式,即字符串的形式,内存中存放相应的ascii码616263(这为了⽅便些了⼗进制,内存中⼆进制)此时再写到
⽂件⾥⾯,这样打开txt的时候⽂件就能正常的解释编码,从⽽实现从编码到字符的映射!
C语⾔存取⽂件时候有⽂本模式和⼆进制模式,即r和rb、w和wb,这⾥的影响仅限于上述1、2,对fputcfwrite函数写到⽂件的内容没有
其他影响,仍然都是内容中的⼆进制数据按字节写出到⽂件中。⽽fprintf则将⼆进制转换成ASCII输出到⽂件中,fscanf将读取的ascii码
转换成⼆进制放到内存中,效率略低。
fgetcfputc都是按照字节存取,⽆论⽂本模式还是⼆进制模式打开,都按照⼀个⼀个字节读取,不存在rn问题。
附⼀篇不错的⽂章:
ASCII⽂件也称为⽂本⽂件,这种⽂件在磁盘中存放时每个字符对应⼀个字节,⽤于存放对应的ASCII码。例如,数5678的存储形式为:
ASC码:00111000
↓ ↓ ↓ ↓
⼗进制码:5 6 7 8共占⽤4个字节。ASCII码⽂件可在屏幕上按字符显⽰,例如源程序⽂件就是ASCII⽂
件,⽤DOS命令TYPE可显⽰⽂件的内容。由于是按字符显⽰,因此能读懂⽂件内容。⼆进制⽂件是按⼆进制的编码⽅式来存放⽂件的。
例如,数5678的存储形式为:1110只占⼆个字节。⼆进制⽂件虽然也可在屏幕上显⽰,但其内容⽆法读懂。C系统
在处理这些⽂件时,并不区分类型,都看成是字符流,按字节进⾏处理。输⼊输出字符流的开始和结束只由程序控制⽽不受物理符号(如回
车符)的控制。因此也把这种⽂件称作"流式⽂件"。⼀个⽂件可以以⽂本模式或⼆进制模式打开,这两种的区别是:在⽂本模式中回车被当
成⼀个字符'n',⽽⼆进制模式认为它是两个字符0x0D,0x0A;如果在⽂件中读到0x1B,⽂本模式会认为这是⽂件结束符,也就是⼆进制
模型不会对⽂件进⾏处理,⽽⽂本⽅式会按⼀定的⽅式对数据作相应的转换。⽂件看作是由⼀个⼀个字节(byte)组成的,那么⽂本⽂件中
的每个字节的最⾼位都是0,也就是说⽂本⽂件使⽤了⼀个字节中的七位来表⽰所有的信息,⽽⼆进制⽂件则是将字节中的所有位都⽤上
了。不管是⼆进制⽂件也好,还是⽂本⽂件也好,都是⼀连串的0和1,但是打开⽅式不同,对于这些0和1的处理也就不同。如果按照⽂本
⽅式打开,在打开的时候会进⾏translate,将每个字节转换成ASCII码,⽽以按照⼆进制⽅式打开的话,则不会进⾏任何的translate;⽂
本⽂件和⼆进制⽂件在编辑的时候,使⽤的⽅式也是不同的。譬如,你在记事本中进⾏⽂本编辑的时候,你进⾏编辑的最⼩单位是字节
(byte);⽽对⼆进制⽂件进⾏编辑的话,最⼩单位则是位(bit),当然我们都不会直接通过⼿⼯的⽅式对⼆进制⽂件进⾏编辑了。
更多推荐
二进制文件
发布评论