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=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));
    }
原文地址:https://www.cnblogs.com/libra13179/p/5821266.html