hex文件和bin文件的区别和联系

 1.分析一下hex文件

  HEX格式文件以行为单位,每行由“:”(16进制为:0x3a)开始,以回车键结束(16进制为:0x0d,0x0a)。行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0x01;”0a”,就表示0x0a。对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a”。

下面为HEX文件中的一行,分析一下:

:10000000FF0462FF051EFF0A93FF0572FF0A93FF

“:” 表示一行的开始。

“:” 后的第1,2个字符“10”表示本行包含的数据的长度,这里就是0x10即16个。

 第3,4,5,6个字符“0000”表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。

第7,8个字符“00”表示数据的类型。该类型总共有以下几种:

00 ----数据记录      

01 ----文件结束记录

02 ----扩展段地址记录

04 ----扩展线性地址记录

这里就是0x00即为普通数据记录。

自后的32个字符FF0462FF051EFF0A93FF0572FF0A93FF就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。

最后两个字符BC表示校验码。

 

再分析一个实际编译出来的hex文件:


第一行为:020000040000FA

“:” 表示一行的开始。

“:” 后的第1,2个字符“02”表示本行包含的数据的长度,这里就是0x02即2个。

 第3,4,5,6个字符“0000”表示数据存储的起始地址,这里表示从0x0000地址开始存储2个数据,其中高位地址在前,低位地址在后。

第7,8个字符“04”表示数据的类型。该类型总共有以下几种:

00 ----数据记录      

01 ----文件结束记录

02 ----扩展段地址记录

04 ----扩展线性地址记录

这里就是0x04即为扩展线性地址记录。

自后的4个字符0000就是本行包含的数据,每两个字符表示一个字节数据,总共有2个字节数据跟行首的记录的长度相一致。

最后两个字符FA 表示校验码。

 

每个HEX格式的最后一行都是固定为:

:00000001FF

01表示文件结束记录

 

2.hex文件和bin文件的对比

1 : HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身。在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的

2 :BIN文件格式  对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。

3:HEX文件格式  HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:

| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |

| MARK ':' |               | OFFSET |

记录类型包括: 

'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录

 '01' End of FileRecord: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾

'02' Extended Segment Address Record: 用来标识扩展段地址的记录

 '04' Extended LinearAddress Record: 用来标识扩展线性地址的记录

4: HEX文件和BIN文件大小有区别,  HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'和字符'F',每个字符需要一个BYTE,所以HEX文件需要> 2倍BIN文件的空间。对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息(:,长度,)。

    Bin文件是最纯粹的二进制机器代码,或者说是"顺序格式"。按照assemblycode顺序翻译成binarymachine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。



举个实际的例子,比如源代码中的字符串“MCU start”,对应在bin文件中就是:


二进制对应的就是:4D 43 55 20 73 74 61 72 74 20 ,用记事本打开显示为MCU start,因为记事本显示的是ASCII码字符。


对应的hex文件为:



比如原来的M 对应二进制是4D,对应到hex中就用34 44 来表示,记事本打开显示为4D











 

参考:1.http://www.52rd.com/Blog/Detail_RD.Blog_joseph9507_23388.html

           2. http://wenku.baidu.com/link?url=eBLdyzcggbKsxJXe57Wv-_QJaBpdw5SWw5ZmkNKzej1SBdb7Y87MlqWHOz1urJ3_yzJ-YcixPRz3F9vxacnHrXeUUHly1qz68Kisn-iL9LS

           3.http://blog.csdn.net/grow_mature/article/details/8553542

          4.http://www.cnblogs.com/heiyue/p/3267847.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值