一、crc16簡介
迴圈冗餘碼crc檢驗技術廣泛應用於測控及通訊領域。crc計算可以靠專用的硬體來實現,但是對於低成本的微控制器系統,在沒有硬體支援下實現crc檢驗,關鍵的問題就是如何通過軟體來完成crc計算,也就是crc演算法的問題。下面給出按位元組計算crc16的演算法。
二、crc16演算法
其原理是:crc碼一般在k位資訊位之後拼接r位校驗位生成。編碼步驟如下:
(1)將待編碼的k位資訊表示成多項式 m(x)。
(2)將 m(x)左移 r 位,得到 m(x)*xr 。
(3)用r+1位的生成多項式g(x)去除m(x)*xr 得到餘數r(x)。
(4)將m(x)*xr 與r(x)作模2加,得到crc碼。
例子:已知資訊位為1100,生成多項式g(x) = x3+x+1,求crc碼。
m(x) = 1100 m(x)*x3 = 1100000 g(x) = 1011
m(x)*x3 / g(x) = 1110 + 010 /1011 r(x) = 010
crc碼為: m(x)*x 3+r(x)=1100000+010 =1100010
三、crc16演算法軟體實現
class crc16class
; // crc低位位元組值表
private readonly byte _auchcrclo = new byte
; ///
/// 計算校驗碼
///
/// 要校驗的物件
/// 要校驗物件的位元組數
/// 校驗結果的低位元組
/// 校驗結果的高位元組
///
public ushort calculatecrc16(byte buffer, int infolen,out byte crclo, out byte crchi)
return (ushort)(crchi << 8 | crclo);
}
PHP串列埠通訊中計算crc16校驗碼
最近使用php開發串列埠通訊業務,在傳送485modbus命令時,基本都要計算crc16校驗碼。網上搜尋了很多文章,很多都計算的不對。本文記錄搜尋到的正確的計算方法。如下 crc16計算 傳入字串格式 001624180101 返回值格式 高8位,低8位 function crc16 string ...
CRC16 串列埠校驗
近期對接客戶 利用串列埠通訊,其中要用到crc ibm 8005 校驗方式,網上搜尋好久,就是對不上計算器算出來的結果,最後通過乙個國外的開源crc 自己扣取成功 先貼上 include include include include include include include include ...
Modbus通訊CRC16校驗程式
modbus 通訊協議的crc 冗餘迴圈校驗碼 含2個位元組,即 16 位二進位制數。crc碼由傳送裝置計算,放置於所傳送資訊幀的尾部。接收裝置再重新計算所接收資訊的crc,比較計算得到的crc是否與接收到的crc相符,如果兩者不相符,則認為資料出錯。注意 仔細對比校驗多項式a005和8001的校驗...