关于CRC校验的一些总结

本文深入解析CRC校验的原理,包括模二除法和异或操作,并介绍了CRC8、CRC16、CRC32等不同类型的计算方法。探讨了如何通过编程实现CRC校验,以及使用查表法来提高计算效率。同时,分析了CRC校验的出错概率,对比了累加和校验方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、CRC校验的原理

https://www.cnblogs.com/liushui-sky/p/9962123.html

模二除法,除数根据多项式不同有很多种,CRC8,CRC16,CRC32,即使同样的CRC8还有几种不同的除数。

上述模二除法说到底就是一种异或操作,如何操作,请参考他人的视频:

[CRC校验]手算与直观演示

该视频就是用异或的方式实现模二除法。

知道了原理,如何编程呢,如果按照视频里的描述,如果我有一个10个字节长度的数据,与8位除数进行crc校验,岂不是要将所有数据串起来成为一个特别长的数据 unsigned int80,  不是的。

2、原理了解了,再来看如何编程,

https://blog.youkuaiyun.com/q1024165872/article/details/85274228

简而言之,先计算第一个字节的crc结果,然后把第一个字节的crc结果与第二个字节进行异或, 异或后的值再进行一次crc计算就可以了,多个字节也是反复这过程就好。

3、计算量来讲,每个字节数据要进行8次移位或者移位+异或(CRC8, CRC16,CRC32都是如此),之后前一个字节的crc结果再与后一个字节数据再进行异或,数据计算量不小。因此,可以采用查表法,查表法可以将每个字节与除数的crc计算通过一次查表完成,可以节省大量计算。对于CRC8表的大小是256byte,CRC16是512byte,不是256*256个byte,个人推断CRC32应该需要256*4个byte就够了。

4、CRC出错的概率

必须说明的是CRC不能百分百保证通过校验的数据都是可靠的,有一定的出错的概率。一般情况下,可以认为出错概率CRC8>CRC16>CRC32,可见容易计算的,往往可靠性也是最低的。

如果不是特别在乎出错的概率,我认为累加和校验则是一种性价比很高的校验方式,计算简单,纠错能力不比crc8校验差太多。

 

最后对引用网址及视频的作者表示衷心感谢。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值