hex与bin文件及hex2bin

HEX文件分析 | 学步园

hex与bin文件及hex2bin_惊蛰_新浪博客

hex介绍:

hex全称intel hex,由任意数量的十六进制数据记录组成,每个记录包含5个域,以冒号开头:

:020000040000FA

:10000000D0020010850100008D0100008F0100006A

:100010009101000093010000950100000000000024

冒号

本行数据长度

本行数据的起始地址

数据类型

数据

校验码

(红色)

(紫色)

(绿色)

(蓝色)

(黑色)

(橙色)

 

1byte

2byte

1byte

N byte

1byte

数据类型有:0x00,0x01,0x02,0x03,0x04,0x05 

  • '00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
  • '01' End of File Record:用来标识文件结束,放在文件的最后,标识HEX文件的结尾
  • '02' Extended Segment Address Record:用来标识扩展段地址的记录
  • '03' Start Segment Address Record:开始段地址记录
  • '04' Extended Linear Address Record:用来标识扩展线性地址的记录
  • '05' Start Linear Address Record:开始线性地址记录(起始线性地址入口)

检验码:所有16进制码的累加和(不计进位)模256后,检验和 = 0x100 - 模值

example:STM32-M3的hex分析

1) :020000040800F2                //偏移地址0x8000000(0x800<16)
2):10400000D849002001410008A5770008295C000874
3):10401000A3770008B54E0008C1A200080000000008

3073)::10FFF000FFFFFFFFFFFFFFFFFFFFFFFFFF3F00FCD3

3074):020000040801F1  //偏移地址0x8010000(0x801<16),大于64k,基址偏移
3075):100000007F00F8FFFFFFFFFFFFFFFFFFFFFFFFFF86

6761):08E66000EC0887F2EC21000038
6762):04000005080040EDC2  //起始线性地址

// __main                                  0x080040ed   Thumb Code    0  entry.o(.ARM.Collect$$$$00000000)
6763):00000001FF
     //hex文件结束

HEX文件分析

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。

HEX格式为:

:020000040000FA

:10000000D0020010850100008D0100008F0100006A

:100010009101000093010000950100000000000024

冒号

本行数据长度

本行数据的起始地址

数据类型

数据

校验码

(红色)

(紫色)

(绿色)

(蓝色)

(黑色)

(橙色)

1byte

2byte

1byte

N byte

1byte

以下内容转自:http://www.zzlab.com/2012/01/hex-file-format-detailed.html

例如 “:1000080080318B1E0828092820280B1D0C280D2854”可以被看作“0x10 0x00 0x08 0x00 0x80 0x31 0x8B 0x1E 0x08 0x28 0x09 0x28 0x20 0x28 0x0B 0x1D
0x0C 0x28 0x0D 0x28 0x54”

第一个字节 0x10表示本行数据的长度;

第二、三字节 0x00 0x08表示本行数据的起始地址;

第四字节 0x00表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。

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

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

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

'03' Start Segment Address Record:开始段地址记录

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

'05' Start Linear Address Record:开始线性地址记录

然后是数据,最后一个字节 0x54为校验和。

校验和的算法为:计算0x54前所有16进制码的累加和(不计进位),检验和
= 0x100 - 累加和

在上面的数据类型后2种记录(04,05)都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。看个例子:

:020000040008F2

:10000400FF00A0E314209FE5001092E5011092E5A3

:00000001FF       

对上面的HEX文件进行分析:

第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0008,校验和为F2。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为(0x0008
<< 16)。后面的数据记录都以这个地址为基地址。

第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X80000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x80000
+ 0x0004 = 0x80004.

第3条记录的长度为00,LOAD OFFSET为0000,TYPE=
01,校验和为FF。说明这个是一个END OF FILE RECORD,标识文件的结尾。

在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x0004。

当数据超过 0x10000字节(64k字节)时,在一个基地址内用完,紧跟着改变基地址,又从新的基地址开始填充数据:

:020000040000FA

:10000000D0020010850100008D0100008F0100006A

:100010009101000093010000950100000000000024

…………..

:10FFE000D2B4F3B4B2B44C83076248728A82087AFE

:10FFF000CB9271C474DD78F6D9F61AF75BF77CF70B

:020000040001F9

:100000005BF73CF75DFF9EFF9DFF3BF798E632C52F

:100010000A838882CDB370C44FC40FC4AFBB2DAB6D

……………

:10FFE000B6CC3CFEDAE558D558D558D517D579E5C5

:10FFF000BAE5BAE599DD99D517C518CD58D559D5C3

:020000040002F8

:10000000B6C418D596C4D7C4B6BC14AC34AC55B479

:1000100096BCB6BCD7BCF7C438CD17C5F7BC17C55E

………………….

:10FFE0000A790B81EA80CA80CA80EA80A978EA800F

:10FFF000CA78CA780B81CA78CA80A978AA78AA7800

:020000040003F7

:10000000CA78EA80A9788978A980C978E878866072

:1000100004482548654825408648C7500430C640F6

…………………….

STM32 与 LPC1788的启动方式分析:

1)STM32的启动

STM32的启动方式见:STM32F10启动配置  http://blog.csdn.net/joqian/article/details/8239235

当从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。

生成的hex文件开始的数据:

:020000040800F2
:100000000004002053020008610200083D2C000893
:10001000650200086702000869020008000000008D

2)LPC1788的启动

LPC1788有内部Flash,上电从内部Flash启动,内部Flash的起始地址为0x0000 0000, 0x0000 0004存放复位中断的入口地址。

生成的hex文件开始的数据:

:020000040000FA
:10000000D0020010850100008D0100008F0100006A
:100010009101000093010000950100000000000024

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: binhex crc校验工具是用于文件校验的工具。比如在传输文件时,为了保证文件的完整性,常常需要使用crc校验工具进行校验。而binhex crc校验工具能够分别对二进制和十六进制文件进行校验。 bin crc校验工具通常采用常见的crc校验算法,如crc32和crc16等。用户只需要将需要校验的二进制文件传入程序中,程序会自动计算出校验码,并将校验码与文件中的校验码进行比较,从而判断文件是否完整。 hex crc校验工具则是将十六进制文件转换成二进制文件后进行校验。用户需要先将十六进制文件转换成二进制文件,然后再通过crc校验工具计算出校验码。校验码同样会与文件中的校验码进行比较,以判断文件是否完整。 总的来说,binhex crc校验工具是非常实用的文件校验工具。在文件传输中使用,能够有效保证文件的完整性和准确性,从而保障数据的安全性。 ### 回答2: binhex crc校验工具是用于验证数据完整性的工具。crc校验利用数据的循环冗余检测码,对数据进行校验和计算,以此来检测数据在传输过程中是否出现错误或丢失。 binhex crc校验工具的使用方法相似,只是数据的表示方式不同。bin指的是二进制形式,而hex是十六进制。在使用crc校验工具之前,需要先确定所要校验的数据文件或数据流的校验规则和值,这一般是由数据的生产者或通信协议规定的。常用的crc校验算法有CRC-16、CRC-32等,用户可以根据需要选择合适的算法。 在使用crc校验工具时,用户只需将数据输入工具中,并指定所选择的算法和规则,工具会自动计算出校验和,并与预期结果进行比较。如果两者相等,则说明数据正确,否则就说明数据出现了错误或丢失,需要进行修复或重新发送。 总之,binhex crc校验工具是提高数据传输可靠性的重要工具,能够有效避免数据传输过程中的错误和丢失,保证数据的准确性和完整性。 ### 回答3: binhex是计算机文件的两种常见格式。bin是二进制格式,即文件以0和1的二进制数据表示;hex是十六进制格式,即文件以16进制数据表示。 crc校验是计算机通信中常见的一种校验方法,它能够检测到数据传输过程中的错误。crc校验通常通过使用一种算法来计算数据的校验值,并将其添加到传输数据的末尾。接收方在接收到数据后,使用同样的算法计算接收数据的校验值,并将其与传输过来的校验值进行比较。如果两个校验值一致,则说明数据正确地传输了;反之则说明数据传输过程中出现了错误。 binhex crc校验工具就是针对不同格式的文件binhex)进行校验的工具。使用这种工具可以快速计算数据的校验值,并验证数据的正确性。这类工具通常提供简单的操作界面,用户只需要将需要校验的文件导入工具中,工具就会自动计算出校验值,并显示校验结果。在进行数据传输时,发送方可以使用这种工具计算出校验值并附在数据末尾,接收方则可以使用同样的工具对接收到的数据进行校验。这样就能够确保数据的准确传输,避免数据错误导致的不必要麻烦和损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值