【c/c++基础】文件、二进制、编码

一、文本文件和二进制文件

文本文件:也称为ASCII文件,文件中的每个字节存放一个ASCII码,代表一个字符,这种文件在打开后能够直接看懂其中的内容。

二进制文件:把内存中的数据按照其在内存中的存储形式原样输出到磁盘上存放。这种文件中一般会有很多不可见字符,打开后看到的可能是一堆乱码。(如果本身就是按字符char存储的,一个字节就是一个字符,那只要写入和读取的编码匹配,就都是可见字符。)

内存存储方式:10000如果直接写在了文本文件里,或者在程序里定义了char a[]="10000",10000就相当于字符串,相当于5个字符构成,一个字符占一个字节(8位),所以占5个字节。如果并非直接写在文本文件里,或者是在程序里定义的short int a = 10000,那么计算机将按2个字节读取,计算机内存中都是以字节保存的十六进制数,所以应该先把10000转成十六进制数,因为计算机首先将short int类型的值转换成16进制存入内存,而16^2= 2^8 (二进制有8位) =1个字节,所以16进制下的两位占用1字节内存,内存中一个地址正好是保存1字节数据,也就是27会占1字节,10会占1字节,所以short int类型的10000在内存里以OX 10 27 存储,这种写入内存的方式如果用文本文件打开,通过ASCII码解码时,会因为不可见字符出现乱码(具体看ASCALL码表的二进制、16进制和字符的转换方式)

二进制读取方式:

  • 如果在内存中或在文件中保存的实际内容是十六进制的1027(只占2字节),说明是将10000当成一个数字来保存的,这种保存方式比较节省空间。这种保存方式,人类并不需要能够看懂其中的内容,因此,打开这种文件,一般也不会以文本形式打开,而是直接以二进制形式打开(后面会讲解如何打开),然后直接读取其中的数据即可。在程序里读取,需要做到的就是:必须按存入的类型进行解析,比如int占4个字节,就读取4个字节的二进制数,转换成int,之前做过类似的代码!
  • 如果以文本形式保存10000 (占5字节,实际保存的十六进制数字是3130303030),说明是将10000当成一个字符串来保存的,这种保存方式相对更耗费空间,但双击打开后人类能看懂。

文本文件的缺点:

  • short int a= 10000是一个整型数,在计算机中该数字用short int保存就足矣,short int只占2字节,但是在文本文件中保存却需要5字节,所以这种保存形式占用的存储空间比较大。
  • 当双击一个文本文件时,甚至刚才用二进制编辑器打开文本文件时,系统都显示出来了人类能够读懂的文本内容。前面谈过,文本文件或者二进制文件是对于人类来说的,而对于计算机,并不区分是什么类型的文件,保存的都是二进制数据,所以,当用文本形式打开文件时,系统会多做一个工作,就是把二进制数据转换成人类能看懂的ASCII码数据,如图12.5中把如下的3130303030这些二进制数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值