imicman的个人空间 https://blog.eetop.cn/1518355 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

二进制和文本文件

已有 864 次阅读| 2016-4-11 21:21 |个人分类:验证杂谈


文件有读写属性,写是将数据写入文件(磁盘存储),读是从磁盘中获取文件信息。

写文件即数据的生成,通常有以下三种方式:
  1.编辑器(各种文件编辑软件)输入(直接)
  2.程序读取键盘输入
  3.程序处理文件,并生成新的文件(间接)
 从第一手文件看,输入是通过人手键盘在编辑器中输入并存储文件信息。上述的1就是这中情况。3是处理1输入的信息然后再产生文件。2是标准输入,然后存储为文件,与1类似。
  通常,我们键盘输入的信息,被保存为文本文件(ASCII码)。即使用8bit对键盘的字母,数字,以及控制字符进行编码。

读文件也有两方式
 1.编辑器打开(文本信息处理)
 2.其他信息处理软件(二进制文件)

最后就是文件要给谁“看”或者说“用”,一个是给人肉眼识别,一个是机器处理。

信息在计算机上的存储按照内容来分,有文本,视频,音频,多媒体,图片,可执行程序,以及归档压缩文件。
除了文本文件之外,我们称其他为二进制文件。

其实,二进制和文本文件容易给人产生误区,更合适的说法是text view/mode(文本视图/模式),binary view/mode(二进制视图/模式)。文件按照一定格式(操作系统定义)存储在存储媒介上,不论文件格式如何都是以01连续的bit串来存储。我们在读取或者写文件时,可以使用二进制和文本两种视图。

在C语言中,文件的读写都是以字节为单位进行操作。对于写文件的三种方式,前两种,无论是文本模式还是二进制模式写入,当用编辑器打开时,看到的都是正常的字母数字标点符号等信息,这是因为我们在写入的时候,都是输入的这些信息,读的时候自然也是正常的可以识别的信息;当我们以第3中方式通过间接手段获得的文件通常是二进制文件(二进制视图),就是以字节为单位切分这个文件,得到的每个字节不仅仅对应了字母数字等肉眼可见信息,同时包括了大量的ASCII控制字符的信息,这些在编辑器中显示的就是乱七八糟的东西,给人感觉就是乱码,因为程序处理生成的文件是给机器看的,有机器可识别的方式存储,当用编辑器查看时,就乱起八糟了。

所以说,就看文件是用来干什么用的,如果是给人看的,自然输入的信息就是ASCII码表中的字母数字信息,无论是文本还是二进制视图下的读写,都不会乱码。
 如果是给看的话,对应的文件包含了ASCII码表的控制字符,如果以文本视图打开,就是乱码。

有两个事实
1.假设要存储01010101这8个字符到文件中,以二进制视图和文本视图都能看到这8个字符,那么流程如下
   文本视图下,存储的是8个字节,使用C语言的fpuc
     fpuc(0x30,handle), fpuc(0x31,handle), fpuc(0x30,handle), fpuc(0x31,handle),  fpuc(0x30,handle), fpuc(0x31,handle), fpuc(0x30,handle), fpuc(0x31,handle).
     占用的是8个字节,用编辑打开,看到的是“01010101”
  二进制视图下,存储的是1个字节,使用fpuc(0x55,handle),用编辑器打开例如UE,看到的是“U”大写的U,而在二进制模式下看到的是0x00000000:55   (即01010101)
  也就是说如果01010101是给人眼看的,那么采用文本视图存储8个字节,用编辑器打开就能看到;而如果是给机器看的,那么用一个字节存储,机器就能解析01010101的bit信息,这个时候用编辑打开的是“U”。因此就看我们把01010101用来干什么,是用来表示字符串肉眼看,还是当作指令或者数据信息给CPU处理。 
  
注意以上过程,涉及到了文件的写生成,文件的读显示,文件存储的目的三个文件的三个方面,其中最重要的就是说自己要明白文件要用来干啥。根据目的,选择不同的视图来读现实文件,如果就是为了文本显示,那么选择文本和二进制视图得到的结果没什么区别(当然下文提到一点区别),如果是为了二进制存储,当我们用编辑器打开文件检查二进制bit信息尝试解析和分析数据是,选择文本视图往往是一堆乱码,如果用的是UE,最好选择二进制开关分析数据(bit分析,当时编辑器通常以地址加16进制数据显示,这是编辑器开发者定义的,感兴趣深究,此处不再深究)。

另外,C语言以文本视图打开文件时,读文件时遇到换行是会转换为回车+换行;写文件时将回车+换行转换为一个换行符。而对于二进制视图而言,不存在上面的转换。


总之,文件本质上是存放在存储介质上的01的bit串,文件系统规定了以01bit串实现的各种格式。我们可以采用文本和二进制两种视图来读写文件;这个时候就需要考虑文件的生成方式,是由键盘键入的还是由程序处理,通常键盘键入保存的文件,无论是二进制还是文本视图下进行的写,读的时候(编辑器)打开没有区别,都是正常肉眼可识别信息;如果是程序生成的文件,编辑器打开(读),文本视图下看到的通常是乱码,因为二进制文件以字节为单位看对应了不可见的ASCII的控制字符,往往这些字符比较多,因此看起来乱七八糟;另外就是,如果目的确定后,二进制视图(为了二进制读文件)往往更节省存储空间。

翻来覆去重复啰嗦,不晓得说清楚了没。
 



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 8

    获赞
  • 34

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 00:22 , Processed in 0.021350 second(s), 18 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部