CRC校验(一)

应用场景

在通信过程中,怎么确定传输的数据中间没有出错?
要知道有没有错误,首先得有一份正确答案。
这份正确答案不可能就是原数据,因为有了原数据那还传个毛线啊。
有一种方法,那就是将原数据经过特定处理得到一串唯一的数字,那么在对端将原数据进行相同处理,看得到的数字是否和发送端的一样就知道数据是否正确了。
这串处理得出的数字就叫做校验码,处理的算法就叫做循环冗余校验(CRC)。在发送数据的时候进行CRC,然后将得到的校验码也一起发过去,这样对端就能检查发送的数据是否出现错误了。当然,这样不能定位出错误,而且还是有概率会出现检测不出错误的或者发生两组不同数据校验码相同的情况1。(毕竟这世界上没有完美之物,视使用场景的要求进行选择就行了)

计算步骤

  1. 选择一组生成多项式,转化成二进制表示

设原数据为:10100101
生成多项式G(X) = X4+X3+X2+X0
二进制表示:G(X) = 11101

  1. 根据多项式位数N,在原数据后补(N-1)个0

G(X)为5位,故在原数据后补5-1=4个0
得:101001010000

  1. 进行模2运算2,得到(N-1)位校验码

在这里插入图片描述


  1. https://blog.csdn.net/yunhua_lee/article/details/42775039 ↩︎

  2. 所谓模2运算就是结果除以2后取余数。比如3 mod 2 = 1。实际上就是异或运算。 ↩︎

猜你喜欢

转载自blog.csdn.net/lblmlms/article/details/108431425