CRC16校驗的學習

2021-08-09 01:30:33 字數 2134 閱讀 8979

一般一些工業上儀器儀表都會選擇crc16校驗,而寫程式對幀資料的校驗也需要選擇crc16校驗看看對不對。所以選擇crc16校驗還是很有必要的。

當然crc2位元組的,具體儲存方式大端儲存還是小端儲存,不同機器不一樣。crc的初值也可能不一樣有的是0x0000,而有的又卻是0xffff具體怎麼選還有根據實際應用環境,進行合理的測試取捨。

/**

*@brief 計算crc

*@param *modbusdata:資料指標

*@param length:資料長度

*@param

*@retval 計算的crc值

*@example

**/unsigned int crc16_modbus(unsigned char *modbusdata, char length)

else}}

return crc;

}

function

crc16

(modbusdata, length)

local i=0; local j=0; local crc=0; local k=1; local k=1; local l=1;

for k=1, length then

crc = bit.bxor(crc, modbusdata[k])

for l=1, 8

doif bit.band(crc, 1) == 1

then

crc = bit.rshift(crc, 1)

crc = bit.bxor(crc, 0xa001)

else

crc = bit.rshift(crc, 1)

endendend

return crc

end

當然還有一種簡單的直接呼叫api的方法這。

...

local revlen = string.len(data)

local crc = ow.crc16(string.sub(data,1,revlen-2))

...

但是吧,兩者有點區別,api文件也做了說明

* crc檢驗值

*@param modbusdata

*@param length

*@return crc檢驗值

*/protected

intcrc16_modbus(byte modbusdata, int length)

else}}

}catch (exception e)

return crc;

}/**

* crc校驗正確標誌

*@param modbusdata

*@param length

*@return 0-failed 1-success

*/protected

intcrc16_flage(byte modbusdata, int length)

return

1;}

CRC 16校驗原理

1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc 碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111 對應的多項式為x6 x4 x2 x 1 而多項式為...

碼crc校驗 CRC16校驗計算流程

首先再次確認計算步驟 1 預置1個16位的暫存器為十六進製制ffff 即全為1111 1111 1111 1111 稱此暫存器為crc暫存器 2 把第乙個位轉換成8位二進位制資料 既通訊資訊幀的第乙個位元組 與16位的crc暫存器的低8位相異或,把結果放於crc暫存器,高八位資料不變 3 把crc暫...

CRC16迴圈冗餘校驗

原理 crc 16校驗碼計算方法 常用查表法和計算法。計算方法一般都是 1 預置1個16位的暫存器為十六進製制ffff 即全為1 稱此暫存器為crc暫存器 2 把第乙個8位二進位制資料 既通訊資訊幀的第乙個位元組 與16位的crc暫存器的低 8位相異或,把結果放於crc暫存器,高八位資料不變 3 把...