手推CRC校验(纯干货,看必懂) |
您所在的位置:网站首页 › crc16校验码怎么算 › 手推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 1∗X6+0∗X5+1∗X4+0∗X3+1∗X2+1∗X1+1∗X0 可以由每一项的系数得到二进制数1010111(通常第一位和最后一位的系数必须为1),这个多项式可以简写成: X 6 + X 4 + X 2 + X + 1 X ^ 6 + X^4 + X^2 +X + 1 X6+X4+X2+X+1 通过上述内容通过分解多项式得到了CRC除数,然后开始进入运算过程: 首先需要一个二进制数据串,这个数据串也就是通讯中传送的数据,需要被验证的那一个,比如:00010001 第二步需要 在数据串末尾加0,加多少个0由上述 多项式的阶数决定,上述多项式最高位是X的6次方,那么就就在末尾加6个0,这样数据串就变成了:00010001000000,作为被除数数据串,与CRC除数进行模2除法,我们不用管什么是模2除法,第三步会说明这个运算的流程,可以直接忽略名称,不难。(不要问为什么补0) 第三步,我们有了数据串也有了CRC校验码,开始计算校验和。 (1)将数据串的第一个1与CRC除数左对齐,每一位按位异或, 将校验和加在1中最原始的数据串之后,就是带有 CRC校验的数据 00010001111011. 整体CRC校验的数据就是这么推算出来的,很白话,其中基本关键点都有例子。CRC有许多不同的算法比如CRC16和CRC32等等,他们的多项式不一样,自然原始数据长度也不同。 其实CRC在应用当中完全不需要手算,但是闲来无事当作练习算一算也可以。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |