HEX文件格式和其校验算法

这次我将在原来的基础上(http://www.cnblogs.com/libra13179/p/5787084.html)继续讲解HEX文件的格式

打开app_valid_setting_apply.hex如下

:020000040003F7
:10FC00000100000000000000FE000000FFFFFFFFF9
:00000001FF

分析如下

对数据帧结构

冒号
本行数据长度
本行数据的起始地址
数据类型
数据
校验码
(红色)
(紫色)
(绿色)
(蓝色)
(黑色)
(橙色)
 
1byte
2byte
1byte
N byte
1byte

补充

数据类型

'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:开始线性地址记录

校验码

以020000040003F7为例子

具体算法为 0x100-((0x02+0x00+0x00+0x04+0x00+0x03)%256)= 0xF7

相关校验测试程序:
下面算法实现记录的校验,校验成功返回1,失败返回0

 //代码引用http://blog.chinaunix.net/uid-24789420-id-1635048.html
bit AnalyseHEX(char hex[],int len)
{
unsigned char i=;
unsigned char data;
int cc=;
char temp[];
do
{
temp[] = hex[i++];
temp[] = hex[i++];
sscanf(temp,"%x",&data);
cc += data;
} while (i<(len-));
cc%=;
cc=0x100-cc;
temp[] = hex[i++];
temp[] = hex[i++];
sscanf(temp,"%x",&data);
return (cc==data)?:;
} int _tmain(int argc, _TCHAR* argv[])
{
char hex[]="::020000040000FA";
AnalyseHEX(hex,sizeof(hex));
}
上一篇:将Excel数据导入mysql数据库的几种方法


下一篇:C#--整型与字节数组byte[]之间的转换