前言
- CRC校验的原理非常复杂,但是用起来却很简单,甚至别人写好了函数,直接拿来调用即可,但是我们还是需要了解一点这个校验码是如何计算得来的
- 网上的教程一大堆,但是很多讲的太深入,让人看的云里雾里,不明所以,所以我才想写一个高中生都能看懂的,不那么深入的,专注于应用的,通俗易懂的CRC校验的解释
何为校验
比如我写了一封电子邮件给你,它是用二进制写的,比如说是1010 1010
当你收到的时候,发现信息是1010 1011
很明显最后一位被篡改了,但是你如何知道接收的信息是否有问题呢,这就需要校验机制
使用校验机制的结果,就是在要发送的数据之后,再接着发一串校验码
在串口通信中用的最多的就是奇偶校验,所谓奇偶校验,其实是两种校验方式,一种叫奇校验,一种叫偶校验,它们有什么区别呢
- 奇校验:要发送的二进制数据中,保证1的个数为奇数,如果有效信息有偶数个1,则校验位为1
- 偶校验:要发送的二进制数据中,保证1的个数为偶数,如果有效信息有奇数个1,则校验位为1
如果刚刚我要发的电子邮件,采用偶校验,那么1010 1010中1的个数为4,是偶数,所以最后校验位是0,所以最终发送出去的数据是1010 1010 0
CRC校验也是如此,它会在原始数据的末尾,再加上一串校验位,这串校验位是利用原始数据,通过固定的算法计算得到的,发送方和接收方,都遵循同样的算法,如果传输过程无误,接收方收到的信息没有被篡改,则接收方可以利用这个算法,计算出校验码,再去跟发送方的校验码进行比较,相同的话则认为接收的数据没有问题(你可以这样去理解,但是实际它不是这样做的)
如何生成CRC校验码
还是上面的例子,要发送的信息为1010 1010,十六进制为0xAA
采用CRC-4/ITU校验,校验码长度4位


8664

被折叠的 条评论
为什么被折叠?



