CRC 16 moudbus 校驗 C 實現

2022-10-08 19:33:13 字數 1120 閱讀 7191

demo

/*

* @author: dapenson

* @date: 2022-03-11 10:33:22

* @lasteditors: dapenson

* @lastedittime: 2022-03-11 10:53:04

* @filepath: \c-wk\crc-16-moudbus.cpp

* @description:

* */

/*crc-16 / modbus :

1)crc暫存器初始值為 ffff;即16個位元組全為1;

2)crc-16 / modbus的多項式a001h (1010 0000 0000 0001b) 『h』表示16進製制數,『b』表示二進位制數

計算步驟為:

(1).預置 16 位暫存器為十六進製制 ffff(即全為 1) ,稱此暫存器為 crc 暫存器;

(2).把第乙個 8 位資料與 16 位 crc 暫存器的低位相異或,把結果放於 crc 暫存器;

(3).檢測相異或後的crc暫存器的最低位,若最低位為1:crc暫存器先右移1位,再與多項式a001h進行異或;若為0,則crc暫存器右移1位,無需與多項式進行異或。

(4).重複步驟 3 ,直到右移 8 次,這樣整個 8 位資料全部進行了處理;

(5).重複步驟 2 到步驟4,進行下乙個 8 位資料的處理;

(6).最後得到的 crc 暫存器即為 crc 碼。

*/#include unsigned short crc16_modbus(unsigned char *data, unsigned int datalen)

else

}data++;

}crcret = crcin >> 8;

crcret = crcret | (crcin << 8);

return crcret;

}int main(void)

; unsigned short ret = 0;

ret = crc16_modbus(buff, sizeof(buff));

printf("%x\n", ret);

return 0;

}

碼crc校驗 CRC16校驗計算流程

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

C 中的crc16校驗

private static ushort crctab new ushort 256 crc校驗公式 crc 傳送的資料序列 新crc private static ushort xcrc ushort crc,byte cp 新增crc校驗字 資訊串 不包括校驗字的串總長度 public sta...

CRC 16校驗原理

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