CRC函数推演验证

为什么函数里能分字节计算CRC?以下是一些观察和推演。

02 85 CRC是73C1

02是813E 翻转是 7C81

如果 数据85按初始值为7C81 计算CRC 结果也是73C1 这就很神奇了
推演一下:
02 85 0000 0010 1000 0101  翻转 0100 0000 1010 0001 
补零并异或FFFF 求余数

1 1000 0000 0000 0101【1011 1111 0101 1110 0000 0000 0000 0000 
                                         0111 1111 0101 1100 10
                                           001 1111 0101 1101 1100
                                               0 0111 0101 1101 1001 00
                                                    001 0101 1101 1000 0100
                                                        0 1101 1101 1000 0001 0                              

(后面发现:1101 1101 1000 0001与分别计算时 第二字节的被除数一样)
                                                           0001 1101 1000 0011 1000
                                                                 0 0101 1000 0011 1101 00
                                                                      011 1000 0011 1100 010
                                                                        00 1000 0011 1100 1110
余数 1000 0011 1100 1110 
CRC:73C1

85 1000 0101 翻转 1010 0001 补零 1010 0001 0000 0000 0000 0000
前16位 异或 0x7C81  0111 1100 1000 0001
1101 1101 1000 0001 0000 0000 模二除以1000 0000 0000 0101

1 1000 0000 0000 0101【1101 1101 1000 0001 0000 0000
                                         0001 1101 1000 0011 1000
                                               0 0101 1000 0011 1101 00
                                                    011 1000 0011 1100 010
                                                      00 1000 0011 1100 1110
余数1000 0011 1100 1110 
CRC:73C1

结果相等 为什么?

再计算 02的CRC 观察一下

1 1000 0000 0000 0101【1011 1111 1111 1111 0000 0000  
                                          0111 1111 1111 1101 10
                                            001 1111 1111 1100 1100
                                                0 0111 1111 1100 1001 00
                                                     001 1111 1100 1000 0100
                                                         0 0111 1100 1000 0001
余数:0111 1100 1000 0001 7C81
CRC:813E

单字节左移8位得出来的余数 和第二个字节异或 再左移8位 得出来的余数
等于 双字节 左移16位得出来的余数
说到底是 CRC这16位的变化 

双字节左移8位后的余数 与 单字节第二字节前16位异或单字节余数得到的值是一样的哦
前8次移位 移位节奏和异或节奏都是一样 就是异或FFFF的次序不同 相当于先留着FF 等移位过去了再异或 最终结果是一样的
那函数里按字节分隔计算确实没问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值