【CRC】CRC推导(三)字节查表与半字节查表
上节我们讲到模二除法,模二除法的操作是按位进行,每次移动一位,然后计算,算法要套2个循环,效率较低。
由于异或运算有交换律和结合律。因此,我们再次看一下范例:
传送数据为0xCF16(1100111100010110b),多项式为0x11021(10001000000100001b)为例,结果如下:
我们省略一些过程,将4次计算合并成一次。
我们先计算蓝色部分,再将蓝色部分结果与蓝绿部分异或,得到的结果就是褐色部分。

蓝色部分是0还是多项式与被除数高4bit有关,其目的是为了消除被除数的高4bit,因此蓝色部分计算出来的值要与被除数高4bit一样。高4bit可以是从0000-1111有对应16种情况,因此我们可以得出一个以高4bit为索引的table,table内容是低16位的异或后的值。

每次取高4bit为索引,获取到低16位的异或值,然后与原值低16位异或即可得到余数(上上张图的褐色部分)。

将8次计算合并成一次,方法与上面的类似。

我们先计算蓝色部分,再将蓝色部分结果与蓝绿部分异或,得到的结果就是褐色部分

蓝色部分是0还是多项式与被除数高8bit有关,其目的是为了消除被除数的高8bit,因此蓝色部分计算出来的值要与被除数高8bit一样。高8bit可以是从00000000-11111111有对应256种情况,因此我们可以得出一个以高8bit为索引的table,table内容是低16位的异或后的值。

每次取高8bit为索引,获取到低16位的异或值,然后与原值低16位异或即可得到余数(上上张图的褐色部分)。

浙公网安备 33010602011771号