CRC校验原理及查表码表由来

CRC校验是编程中使用比较多的一种检验方式,包括CRC8, CRC16, CRC32校验等。校验长度越长,校验所需要的时间越久。为了缩短计算时间,CRC校验又分为直接计算法和查表计算法。

直接计算是一种按位计算方法,其计算原理如下:

假定有待校验数据A = 1101,校验多项式B = 0000 0111,当前CRC校验值 CRC = 1011 1001, 期待结果C。则计算过程如下:

步骤0:CRC = 1011 1001 首先与数据A左移4位后异或得到新CRC1 =  1011 1001^1101 0000 = 0110 1001;

步骤1:CRC1 首位为0, CRC1左移1位得 CRC2 = 1101 0010;

步骤2:CRC2首位为1, CRC2左移1位得 CRC3 = 1010 0100, 然后CRC2与校验多项式B异或得 CRC4 = 1010 0100 ^ 0000 0111= 1010 0011;

步骤3:CRC4首位为1, CRC4左移1位得CRC5 = 0100 0110, 然后CRC4与校验多项式B异或得 CRC6 = 0100 0110^ 0000 0111 = 0100 0001;

步骤4:CRC6首位为0, CRC6左移1位得CRC7 = 1000 0010;

至此,4位宽度计算完成。

从以上过程可以看出,步骤1到步骤4的执行过程与步骤0所得的结果CRC1的高4位非常相关,该高4位取值直接决定了步骤1到步骤4的运行结果;

进一步将CRC1划分为CRC1 = (0110 0000)^(0000 1001);

则结果就可以写成如下:

C =  (0110 0000)^(0000 1001)^(一系列校验多项式因CRC1高4位取值变化后的多项式)

备注1:步骤0-步骤4中的CRC值左移操作可以认为 是CRC值不变,校验多项式随CRC1高4位取值不同进行变换。

因此,又可以根据CRC1的高4位取值与校验多项式预先生成一张2^4的码表,在实际计算的时候直接取CRC1的低4位(1001)与对应的码值异或,这样来大大加速计算,又称为查表法。依据每次计算位宽度的不同,可以预先计算出2^4,2^8个码值,常用是按照字节计算,则预先准备好2^8个码值。码值的位数则随使用的CRC校验宽度变化。

备注2:实际计算中,校验是从高位向低位,因此,CRC1的低4位(1001)会左移4位,如果在CRC8的校验当中。同理,CRC16校验会左移8位(采用8位宽度校验),CRC32校验会左移24位(采用8位宽度校验)。

备注3:如果校验中,存在位反转操作,则需要对输入数据进行位反转操作。

备注4:

参考文章链接

1.http://blog.csdn.net/suding666/article/details/8078751

2.http://wenku.baidu.com/link?url=WFR4z3kwsTcvaV5u-VndtVu1KhGDAWdUhO8_0wG09o9OzHrV72KmYq9pN1fHjSKw4v1UN8NqSvBKR66g2TvQIrTe6aFfnBGgJy0baTmEbh_

3.http://www.xjtudll.cn/Exp/273/





  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值