crc校驗,官方一大堆看不懂的數據文字多項式,我大白話說一說,
前置知識:需要被校驗的數據M(x) 約定的生成多項式G(x) M(x)%G(x)的值就是crc值(即校驗位) 其中x=2(二進制)
正題:
循環冗余校驗碼由信息碼n位和校驗碼k位構成。k位校驗位拼接在n位數據位后面,n+k為循環冗余校驗碼的字長,又稱這個校驗碼(n+k,n)碼
n位信息位可以表示成為一個報文多項式M(x),最高冪次是x^(n-1)(n位二進制)。約定的生成多項式G(x)是一個k+1位的二進制數,因為最高冪次是x^k。將M(x)乘以x^k,即左移k位后,除以G(x),得到的k位余數就是校驗位
擴展:
實際的CRC校驗碼生成是采用二進制的模2算法(即減法不借位、加法不進位)計算出來的,這是一種異或操作。
常見crc參數
//NAME (模型名字)
//WIDTH (生成的crc數據位寬度) 16
//POLY ibm(POLYNOMIAL_IBM,0x1021) ccitt(POLYNOMIAL_IBM,0x8005)
//REFIN (原始數據是否翻轉) false
//REFOUT (計算好crc之后是否進行翻轉) ibm(false) ccitt(true)
//XOROUT (計算crc值與此參數進行亦或之后才輸出) ibm(POLYNOMIAL_IBM,0x1021) ccitt(POLYNOMIAL_IBM,0x8005)
//INIT (CRC初始值) ibm(CRC_IBM_SEED,0xFFFF) ccitt(CRC_CCITT_SEED,0x1D0F)
注意 與1 異或(xor)取反 與0 異或(xor)還是本身
計算 http://www.ip33.com/crc.html
參考 https://cloud.tencent.com/developer/article/1704685
程序代碼和測試 demo
https://blog.csdn.net/whik1194/article/details/108837333
//