posts - 256, comments - 1314, trackbacks - 41, articles - 8
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
        二进制文件,这个再基础不过的名词,正因为它的无处不在,或许没有人会关注它背后隐含的内容。其实我也一样,在写下这些文字之前,我也是认为二进制文件就像空气一样,平常得让人完全忽略了。
        很偶然的,今天在写代码的时候使用了fopen函数:
                 FILE * fopen (const char * filename, const char * mode)
大家可以看到第二个参数是mode,而这个参数定义了文件打开的方式,w、a等都可以做为函数的实参。除此之外,还有两个值:tb。这两个值定义了文件是按照文本(text)还是二进制(binary)方式开发。正是这个两个值引起了我对二进制文件的兴趣,因为它们让我想到了很多问题。
        首先,出现在脑海的第一个问题是:文本文件和二进制文件有什么区别呢?我想这个问题并不是每个程序员能够马上回答上来的,至少我是不行了。查阅了资料之后,发现答案就在自己的知识范围之内的:将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;
        接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;
        最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。

Feedback

#1楼    回复  引用  查看    

2004-09-21 17:16 by atempcode      
--那么文本文件中的每个字节的最高位都是0,

Have you check the chinese text file? Have you checked the UNICODE text file?

#2楼 [楼主]   回复  引用  查看    

2004-09-21 18:10 by FantasySoft      
这里提到的文本文件,仅仅是指由ASCII码组成的文本文件。诚然,文本文件组成的方式与其保存的格式是密切相关的。Unicode text file就不符合上面所说的每个字节的最高位是0了。

谢谢您的指点!我再把这篇blog补充一下吧。

#3楼 [楼主]   回复  引用  查看    

2004-09-21 20:04 by FantasySoft      
http://www.cl.cam.ac.uk/~mgk25/unicode.html 一个关于Unicode和UTF-8详尽的FAQ。

#4楼    回复  引用  查看    

2006-06-22 17:27 by 柳絮 [未注册用户]
知音哪,我被这个问题困扰了n天了。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-10-14 18:03 编辑过
 
另存  打印
最新IT新闻:
· 56被关一月 危机的是整个视频业
· 李开复:中文搜索是谷歌战略核心
· 《星际争霸2》新图:黑暗圣堂武士Zeratul
· FriendFeed介绍
· 微软在台北发布新色鼠标产品