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 而多項式為...