文本文件和二进制文件有什么区别?

文本文件和二进制文件有什么区别?
2008-05-13 22:14
二进制文件,这个再基础不过的名词,正因为它的无处不在,或许没有人会关注它背后隐含的内容。其实我也一样,在写下

这些文字之前,我也是认为二进制文件就像空气一样,平常得让人完全忽略了。
        很偶然的,今天在写代码的时候使用了fopen函数:
                 FILE * fopen (const char * filename, const char * mode)
大家可以看到第二个参数是mode,而这个参数定义了文件打开的方式,w、a等都可以做为函数的实参。除此之外,还有两个值:t和

b。这两个值定义了文件是按照文本(text)还是二进制(binary)方式开发。正是这个两个值引起了我对二进制文件的兴趣,因为它们

让我想到了很多问题。
        首先,出现在脑海的第一个问题是:文本文件和二进制文件有什么区别呢?我想这个问题并不是每个程序员能够马上回答

上来的,至少我是不行了。查阅了资料之后,发现答案就在自己的知识范围之内的:将文件看作是由一个一个字节(byte) 组成的,

那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字

节中的所有位都用上了。这就是两者的区别;
        接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是

文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会

进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;
        最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进

行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二

进制文件进行编辑了。

----------------2---------------


二进制文件和文本文件都是0,1组成,但文件系统对他们的解释不一样,一般系统调用(或WIN32API)都会分为字符
式和二进制式(或流式).文本或字符文件代表慢速设备,而二进制文件代表可以大块数据操作的快速外设,二进制文件内容基本无意义

,系统对它不加解释地传给调用者,解释由调用者负责.而对字符文件,系统把他理解为单字节的ASCII或多字节的UNICODE字符串,并且

对其中的特殊字符(如回车等)加以特殊处理.所以同一个文件,可以使用不同类型的系统调用.

文本文件也叫做ASCII码文件,与以‘文本方式’打开文件不是同一个概念!文本文件存储的是ASSCII码字符,即存储在磁盘上只占用二进制的0x20--0x7e。另外,还有回车(0x0d),换行(0x0a),TAB(0x09)等,所以有可压缩的空间。

    换行和回车是不同的,而且在不同的操作系统,解释也不相同。‘/n’一般会操作系统被翻译成"行的结束",即LF(Line-Feed);‘/r’会被翻译成"回车",即CR(Cariage-Return)

    回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:
(1) Dos和windows采用回车+换行(CR+LG)表示下一行
(2) UNIX采用换行符(LF)表示下一行
(3) MAC机采用回车符(CR)表示下一行。
当在不同的系统间传递文件,就要涉及格式的转换。

    文本方式和二进制方式的最大区别在于文本方式对于'/n'换行符的理解不同
(1)在DOS平台下,该字符会被展开成<CR>< LF>两个控制字符(相当于"/r/n"),在ASCII字符集下是 0DH,0AH
(2)在UNIX平台下,仅仅是<LF>,不会展开。
(3)在二进制方式下,不管是什么平台,'/n'都是精确的<LF>。

   在linux/unix 系统上,只有一种文件类型的系统,带b字母的模式和对应的不带b字母的模式是相同的。(UNIX文本文件通常不包含Ctrl+Z和/r)
关于EOF:
    EOF可以作为文本文件的结束标志,但不能作为二进制文件的结束符.feof函数既可以判断二进制文件,又可以判断文本文件.

    EOF在Windows下是ctrl+z,linux下是ctrl+D.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值