CRC 余数的计算
设 CRC 多项式为 C C C。
先只说明两个字节的情况(最高有效位在左侧),大于两个字节(16 位数)的可以类推。注意下文中的所有加法都是无进位加法,也就是二进制中的异或。
表中数据为单字节(8 bit)的 CRC 余数。将被除数多项式每八位为一组,设为 B 1 x 8 + B 0 x 0 B_{1} x^8 + B_0x^0 B1x8+B0x0。
其中 B 1 , B 0 B_{1}, B_0 B1,B0 是 x x x 进制的八位数。
已知 B 1 x 32 m o d C = R 1 B_{1} x^{32} \bmod C= R_1 B1x32modC=R1, R 1 R_1 R1 为 32 位的余数。
注意下文中的 Γ x 32 m o d C \Gamma x^{32} \bmod C Γx32modC 均可以直接查表获得(以 Γ \Gamma Γ 为 CRC 表的索引)。
求 ( B 1 x 8 + B 0 x 0 ) x 32 m o d C (B_{1} x^8 + B_{0}x^0)x^{32} \bmod C (B1x8+B0x0)x32modC 的值:
等价于 ( B 1 x 40 + B 0 x 32 ) m o d C = ( R 1 x 8 + B 0 x 32 ) m o d C (B_{1} x^{40} + B_{0} x^{32}) \bmod C = (R_1 x^8 + B_{0}x^{32}) \bmod C (B1x40+B0x32)modC=(R1x8+B0x32)modC,
令 R 1 = γ 1 , 4 x 24 + γ 1 , 3 x 16 + γ 1 , 2 x 8 + γ 1 , 1 x 0 R_1 = \gamma_{1,4} x^{24} + \gamma_{1,3} x^{16} + \gamma_{1,2} x^{8} + \gamma_{1,1}x^0 R1=γ1,4x24+γ1,3x16+γ1,2x8+γ1,1x0,其中 γ 1 , i ( i = 1 , 2 , 3 ) \gamma_{1,i}\ (i=1,2,3) γ1,i (i=1,2,3) 为 8 位数。
所以:
( B 1 x 40 + B 0 x 32 ) m o d C = ( ( B 1 x 32 m o d C ) x 8 + B 0 x 32 ) m o d C = ( R 1 x 8 + B 0 x 32 ) m o d C = ( γ 1 , 4 x 32 + γ 1 , 3 x 24 + γ 1 , 2 x 16 + γ 1 , 1 x 8 + B 0 x 32 ) m o d C = ( ( γ 1 , 4 + B 0 ) x 32 + γ 1 , 3 x 24 + γ 1 , 2 x 16 + γ 1 , 1 x 8 ) m o d C = ( ( γ 1 , 4 + B 0 ) x 32 m o d C + γ 1 , 3 x 24 + γ 1 , 2 x 16 + γ 1 , 1 x 8 ) m o d C \begin{aligned} &(B_1 x^{40} + B_0x^{32}) \bmod C \\ &= ((B_1 x^{32} \bmod C) x^8 + B_0x^{32})\bmod C \\ &= (R_1 x^8 + B_{0}x^{32}) \bmod C \\ &=(\gamma_{1,4} x^{32} + \gamma_{1,3} x^{24} + \gamma_{1,2} x^{16} + \gamma_{1,1} x^8 + B_{0} x^{32}) \bmod C \\ &= ((\gamma_{1,4} + B_{0}) x^{32} + \gamma_{1,3} x^{24} + \gamma_{1,2} x^{16} + \gamma_{1,1} x^8) \bmod C \\ &= ((\gamma_{1,4} + B_{0}) x^{32} \bmod C + \gamma_{1,3} x^{24} + \gamma_{1,2} x^{16} + \gamma_{1,1} x^8)\bmod C \end{aligned} (B1x40+B0x32)modC=((B1x32modC)x8+B0x32)modC=(R1x8+B0x32)modC=(γ1,4x32+γ1,3x24+γ1,2x16+γ1,1x8+B0x32)modC=((γ1,4+B0)x32+γ1,3x24+γ1,2x16+γ1,1x8)modC=((γ1,4+B0)x32modC+γ1,3x24+γ

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



