常用crc查表法_请教查表法计算CRC的原理

自己写过的, 希望对你有帮助

Cyclic Redundancy Check(CRC) 原理及实现

///

1: 需求

在数据传送过程中,为了能够进行错误检测, 往往在数据后追加一些检测码,

当接受方收到了数据后, 用同样的算法进行计算检测码, 如果一致说明数据

正确, 否则通知发送方重新发送。 现假定数据为6 23 44:

历史上出现过多个算法, 如:

累加求模:

(6+23+4)%256 == 33, 则发送数据6 23 44 33

XOR:

(6^ 23 ^4) = 21 则发送数据 6 23 4 21

然而, 这却不是好的算法, 好的算法要求数据的数据能散列的分布在检测码

中, 对于累加求模的(6 24 3 )以及xor的(6 22 5)都能输出同样的检测码

于是, CRC诞生了。

///

///

2:CRC的背景理论

crc将数据追加结尾的wbit的0当作一个很大阶的多项式, 用它去除于另一个双方约定的多项式,

得到的余数, 则为检测码,其中w为约定多项式的最大阶数, 最后传输原始数据追加检测码,

其中任何一位发生变化, 都导致最后得到的结果差别很大,

CRC因为容易简单实现以及容错性强, 而被广泛使用。

追加wbit的好处是, 整个传输的数据刚刚能够被约定的多项式

p1|00..00| / p2 = p3 .....p4

则(p1|00.00|+p4) / p2 = p3....0

p1|00.00|+p4 = p1|p4|  (后面的多项式运算能够证明)

这里为了方便说明, 下列进行运行的数据都没有追加结尾的0

这里有2个问题, 如何把数据流转换成多项式, 以及如何做多项式的除法。

数据流的转换:

假如有2个byte(6,23)我们把他转成16进制为0617, 二进制表示为

0000 0110 0001 0111 对应多项式 x^10 + x^9 + x^4 + x^2 + x^1 + 1

多项式除法:

先说多项式加法, 多项式x^4 + x^2 + x + 1 和多项式x^4+x^3+1

为 2*x^4 + x^3 + x^2 + x^1 + 2*(x^0)

由于x是个未知数, 不知道怎么进行系数和阶的转换, 于是规定:

"如果系数mod2==0, 那么

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值