1. 程式人生 > >Hex檔案格式及其校驗演算法

Hex檔案格式及其校驗演算法

hex   檔案記錄格式如下: 
:AABBBBCCDD......DDEE 
其中
:   表示行起始標誌
AA:表示本條記錄中的資料位元組數
BBBB:本條記錄中的資料在儲存區中的起始地址
        CC:記錄型別,含義如下:        
    '00' Data Record

'01' End of File Record

'02' Extended Segment Address Record

'03' Start Segment Address Record

'04' Extended Linear Address Record

'05' Start Linear Address Record

DD......DD:表示資料位元組
EE:表示校驗和,具體演算法為 0x100-((0xAA+0xBB+0xBB+0xCC+0xDD+......+0xDD)%256)
示例:
:020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA
其中:
0x02:表示本記錄有效資料長度為0x02
0x0000:表示本條記錄在
0x04:表示本條記錄為Extended Linear Address Record
接下來的兩個位元組表示有效資料
0xFA:表示校驗和 0xFA=0x100-(0x02+0x00+0x00+0x04+0x00+0x00)

最後一行為檔案結束標誌:
:00000001FF

Hex實際佔用儲存區大小計算辦法

Hex實際大小=檔案結束標誌前面一條記錄的儲存起始地址+這條記錄的有效資料長度


相關校驗測試程式
下面演算法實現記錄的校驗,校驗成功返回1,失敗返回0
  1. bit AnalyseHEX(char hex[],int len)
  2. {
  3.   unsigned char i=1;
  4.   unsigned char data;
  5.   int cc=0;
  6.   char temp[2];
  7.   do
  8.   {
  9.       temp[0] = hex[i++];
  10.       temp[1] = hex[i++];
  11.       sscanf(temp,"%x",&data);
  12.       cc += data;
  13.   } while (i<(len-2));
  14.   cc%=256;
  15.   cc=0x100-
    cc;
  16.   temp[0] = hex[i++];
  17.   temp[1] = hex[i++];
  18.   sscanf(temp,"%x",&data);
  19.   return (cc==data)?1:0;
  20. }
  21. int _tmain(int argc, _TCHAR* argv[])
  22. {
  23.     char hex[]="::020000040000FA";
  24.     AnalyseHEX(hex,sizeof(hex));
  25. }

相關推薦

Hex檔案格式及其演算法

hex   檔案記錄格式如下:  :AABBBBCCDD......DDEE  其中:   表示行起始標誌AA:表示本條記錄中的資料位元組數BBBB:本條記錄中的資料在儲存區中的起始地址         CC:記錄型別,含義如下:            '00' Data

關於CRC演算法及其C程式碼實現

以CRC16作為參考: CRC16常見的標準有以下幾種,被用在各個規範中,其演算法原理基本一致,就是在資料的輸入和輸出有所差異,下邊把這些標準的差異列出,並給出C語言的演算法實現。 CRC16_

Android中的時間格式

imp pri .text protected oncreate @override ast activity ext public class MainActivity extends Activity implements OnClickListener{ priva

C語言 CRC32演算法

#include <stdio.h> #include <string.h> #include <stdlib.h> typedef signed char s8; typedef unsigned char u8; typedef signed shor

CentOs檔案的完整性

linux md5sum hero.png fefd01c9db6e3e83b978eff1b7a67c02 hero.png   sha1sum hero.png f1e929db9cef34a8786ee4b6246fb739566c799d hero.png

累加和演算法(CheckSum演算法

因為外界總會對電路存在或多或少的干擾,對於數字訊號,很可能導致傳輸的資料出現千差萬別。對於很多需要傳輸資料的場合,尤其是一些資料可能會影響一些硬體的動作(諸如嵌入式的一些裝置、機器人等),錯誤的資料可能會帶來一些隱性風險,想想都可怕。 由於本人是嵌入式相關領域的,平時玩的都是微控制器,當然微

檔案上傳繞過總結

檔案上傳校驗 前端javascript校驗(一般只校驗字尾名) 服務端校驗 檔案頭content-type欄位校驗(image/gif) 檔案內容頭校驗(GIF89a) 字尾名黑名單校驗 字尾名白名單校

java實現CRC16 MODBUS演算法

最近做通訊開發,遇到了校驗碼的問題 我在這個網站上試了試 裡面有各種crc16的校驗碼 廢話不多說,直接上程式碼 /** * 計算CRC16校驗碼 * * @param bytes * @return

java 進行檔案的crc

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; impor

hex檔案格式學習記錄

.hex檔案 .hex檔案是什麼 .hex檔案的資料結構 按照記錄型別具體分析 Mermaid Flowchart .hex檔案是什麼 它是由一行行符合Intel HEX 檔案格式的文字所構成的ASCII

CRC演算法及實現 C

 標準CRC生成多項式如下表:   名稱       生成多項式             簡記式*  標準引用    CRC-4       x4+x+1                  3         ITU G.704    CRC-8       x8+x5+x

Modbus CRC16演算法--查表法(已經過本人測試,工作良好)

程式碼如下: uchar auchCRCHi[]= { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0

STM32學習筆記--hex檔案格式

    hex 是 Intel 公司制定的一種使用 ASCII 文字記錄機器碼或常量資料的檔案格式,它可以燒錄到MCU中,被MCU執行的一種檔案格式。一個hex檔案由多條記錄組成,而每條記錄由5個部分組成,     格式如下:     “:

車輛VIN碼的演算法

一、關於車輛的VIN碼介紹: 直接百度 二、VIN碼的校驗位是第九位,對於第九位的計算方法如下: 2.1 內容的權值:VIN碼各位數字的“對應值”: 0 1 2 3 4 5 6 7 8 9

Luhn algorithm(附信用卡演算法C語言實現)

From Wikipedia, the free encyclopedia The Luhn algorithm or Luhn formula, also known as the "modulus 10" or "mod 10" algorithm, is a simple checksum formu

Java使用luhn演算法實現銀行卡號合法性&&獲取銀行卡號所屬銀行

Luhn校驗演算法或是Luhn 公式,也被稱作“模10演算法”。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼, 或是加拿大的社會保險號碼的驗證。該演算法是由IBM的科學家Hans Peter Luhn所創造,於1954年1月6日提出該

SHA1演算法C語言實現

SHA1 安全雜湊演算法:對於長度小於2^64位的訊息(1M = 1024k,1K = 1024位元組,1BYTE = 8bit 可以想象一下2的63次方位可以表示一個多大的資料檔案),SHA1會產生一個160位的訊息摘要。當接收到訊息的時候,這個訊息摘要可以用來驗證資料的

java實現銀行卡卡號 Luhm 演算法

效驗是否為銀行卡,用於驗證 現行 16 位銀聯卡現行卡號開頭 6 位是 622126~622925 之間的,7 到 15 位是銀行自定義的,可能是髮卡分行,髮卡網點,髮卡序號,第 16 位是校驗碼。16 位卡號校驗位採用 Luhm 校驗方法計算:1,將未帶校驗位的 1

[轉]常用正則表示式大全-----使用者名稱、密碼、郵箱、等資料格式

正則表示式收集,供自己查閱之用 轉自:http://www.jb51.net/article/72867.htm 一、校驗數字的表示式 1 數字:^[0-9]*$  2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$  4 m-n位的數字:^

Java實現身份證演算法

public class ValidateNumberId { private static String[] validtable = {"1","0","X","9","8","7",