这次我将在原来的基础上(http://www.cnblogs.com/libra13179/p/5787084.html)继续讲解HEX文件的格式
打开app_valid_setting_apply.hex如下
:020000040003F7
:10FC00000100000000000000FE000000FFFFFFFFF9
:00000001FF
分析如下
对数据帧结构
|
补充
数据类型
'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=1; unsigned char data; int cc=0; char temp[2]; do { temp[0] = hex[i++]; temp[1] = hex[i++]; sscanf(temp,"%x",&data); cc += data; } while (i<(len-2)); cc%=256; cc=0x100-cc; temp[0] = hex[i++]; temp[1] = hex[i++]; sscanf(temp,"%x",&data); return (cc==data)?1:0; } int _tmain(int argc, _TCHAR* argv[]) { char hex[]="::020000040000FA"; AnalyseHEX(hex,sizeof(hex)); }