CRC16 串列埠校驗

2022-08-29 03:27:13 字數 893 閱讀 9863

近期對接客戶 利用串列埠通訊,其中要用到crc-ibm 8005 校驗方式,網上搜尋好久,就是對不上計算器算出來的結果,最後通過乙個國外的開源crc**,自己扣取成功:

先貼上 **:

#include #include #include #include #include #include #include #include #include #define		crc_poly_sick		0x8005

#define crc_start_sick 0x0000

unsigned short crc_sick( const unsigned char *input_str, size_t num_bytes ) /* crc_sick */

// aa 00 00 0b 0b 01 00 00

int main();

unsigned short crc_val = crc_sick(protocol_buffer_open_wifi, 8);

unsigned char crchi = (unsigned char)(crc_val >> 8); //高八位

unsigned char crclo = (unsigned char)crc_val;

printf("crchi:0x%x crclo:0x%x \n",crchi,crclo);

return 0;

}

驗證結果:

(高低位反了,記得更換下)

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校驗的學習

一般一些工業上儀器儀表都會選擇crc16校驗,而寫程式對幀資料的校驗也需要選擇crc16校驗看看對不對。所以選擇crc16校驗還是很有必要的。當然crc是2位元組的,具體儲存方式大端儲存還是小端儲存,不同機器不一樣。crc的初值也可能不一樣有的是0x0000,而有的又卻是0xffff具體怎麼選還有根...