手推CRC校验(纯干货,看必懂)

网上CRC校验如何计算的相关的教程非常多,但是不够干,这次的CRC校验的笔记纯干货通俗易懂。

CRC即循环冗余校验,是数据通讯中用来校验错误的,是一串二进制数。概念知道这些就够了,我们要研究这串数怎么来的。

具体研究怎么算之前,先说一个计算机中的基础运算:异或运算(XOR是运算符),之后计算要用到。
例:0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

然后了解一下多项式,通过多项式可以得到CRC算法中的CRC除数,这个除数由多项式的系数组成二进制数。比如
1 ∗ X 6 + 0 ∗ X 5 + 1 ∗ X 4 + 0 ∗ X 3 + 1 ∗ X 2 + 1 ∗ X 1 + 1 ∗ X 0 1*X ^ 6 + 0*X^5 + 1*X^4 + 0 * X^3 + 1* X^2 +1*X^1 + 1* X^0 1X6+0X5+1X4+0X3+1X2+1X1+1X0
可以由每一项的系数得到二进制数1010111(通常第一位和最后一位的系数必须为1),这个多项式可以简写成:
X 6 + X 4 + X 2 + X + 1 X ^ 6 + X^4 + X^2 +X + 1 X6+X4+X2+X+1

通过上述内容通过分解多项式得到了CRC除数,然后开始进入运算过程:

  1. 首先需要一个二进制数据串,这个数据串也就是通讯中传送的数据,需要被验证的那一个,比如:00010001

  2. 第二步需要 在数据串末尾加0,加多少个0由上述 多项式的阶数决定,上述多项式最高位是X的6次方,那么就就在末尾加6个0,这样数据串就变成了:00010001000000,作为被除数数据串,与CRC除数进行模2除法,我们不用管什么是模2除法,第三步会说明这个运算的流程,可以直接忽略名称,不难。(不要问为什么补0)

  3. 第三步,我们有了数据串也有了CRC校验码,开始计算校验和。
    (1)将数据串的第一个1与CRC除数左对齐,每一位按位异或,
    数据串第一个1与CRC除数左对齐
    (2)将未处理的数据搬下来作为新数据串与CRC除数进行(1)中的运算
    模2除法第二步
    (3)重复(2)中的操作完成运算,直到数据串中所有数据都被处理过停止。得到的二进制数就是CRC校验和,这个例子的结果为111011。校验和的长度为CRC除数的长度减1,例如校验和为0011111,则校验和为011111(长度一定要满足)。
    校验和为111011

  4. 将校验和加在1中最原始的数据串之后,就是带有 CRC校验的数据
    00010001111011.

整体CRC校验的数据就是这么推算出来的,很白话,其中基本关键点都有例子。CRC有许多不同的算法比如CRC16和CRC32等等,他们的多项式不一样,自然原始数据长度也不同。
其实CRC在应用当中完全不需要手算,但是闲来无事当作练习算一算也可以。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值