qt crc校验学习笔记


 

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

 

 

//


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM