[问题] CRC CCITT的问题

楼主: a1781781781 (嘎了给给)   2020-01-15 09:46:54
各位先进好
最近在学CRC 使用的多项式是CCITT
有在网络上找到算法
https://i.imgur.com/5PpCksg.jpg
但我不太理解红框处在做什么事情
感谢先进解答
作者: Lipraxde (Lipraxde)   2020-01-15 09:56:00
^ = xor, << = 位元左移
楼主: a1781781781 (嘎了给给)   2020-01-15 10:29:00
运算我懂,我不懂的是在对资料做怎样的处理,把新的字节加到旧的CRC再去算新的CRC?
作者: Lipraxde (Lipraxde)   2020-01-15 10:31:00
应该吧,我也不是很懂 CRC
作者: sarafciel (Cattuz)   2020-01-15 19:47:00
16bit CRC是一次除2byte 但是他这边一次只有读1byte所以他这边用了点小技巧,以0xABCD为例,他这边做的事相当于把0xABCD拆成0xAB00^0x00CD ,然后把^0x00CD这件事移到你做八次除法后再做,因为XOR可结合可交换,这样子跟你把0xABCD直接做8次除法是一样的,同理可证,第三个byte如果是0xEF,那就是做完16次后补进来,结果就等同于0xABCDEF做16次除法。
楼主: a1781781781 (嘎了给给)   2020-01-15 20:40:00
了解!太感谢了!
作者: Lipraxde (Lipraxde)   2020-01-15 21:05:00
恩...那他为什么不一口气多读点呢,想好久XD
作者: sarafciel (Cattuz)   2020-01-15 21:13:00
我猜啦 一次做两byte的话 len是奇数时应该要多一个判断一个一个读就不会有这个问题 code会简洁一些XD不过一次多挖几个进来应该会比较快(?) 这个就看需求
作者: Lipraxde (Lipraxde)   2020-01-15 21:40:00
我是想说反正他都用 int,一次读 4bytes 就可以直接用的小于 0 做 MSB 的判断,前后多处理一下 ptr 对齐跟 count
作者: LPH66 (-6.2598534e+18f)   2020-01-15 23:07:00
MSB 判断要另外做, 因为这里判断的是有无进位出去也就是事实上判断的是比 MSB 再出去一个 bit
作者: Lipraxde (Lipraxde)   2020-01-16 10:54:00
判断完才移出去吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com