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));
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM