→ Lipraxde: ^ = xor, << = 位元左移 01/15 09:56
→ a1781781781: 運算我懂,我不懂的是在對資料做怎樣的處理,把新的 01/15 10:29
→ a1781781781: 位元組加到舊的CRC再去算新的CRC? 01/15 10:29
→ Lipraxde: 應該吧,我也不是很懂 CRC 01/15 10:31
→ sarafciel: 16bit CRC是一次除2byte 但是他這邊一次只有讀1byte 01/15 19:47
→ sarafciel: 所以他這邊用了點小技巧,以0xABCD為例,他這邊做的事 01/15 19:47
→ sarafciel: 相當於把0xABCD拆成0xAB00^0x00CD ,然後把^0x00CD這 01/15 19:47
→ sarafciel: 件事移到你做八次除法後再做,因為XOR可結合可交換, 01/15 19:48
→ sarafciel: 這樣子跟你把0xABCD直接做8次除法是一樣的,同理可證, 01/15 19:48
→ sarafciel: 第三個byte如果是0xEF,那就是做完16次後補進來,結果 01/15 19:49
→ sarafciel: 就等同於0xABCDEF做16次除法。 01/15 19:49
→ a1781781781: 了解!太感謝了! 01/15 20:40
→ Lipraxde: 恩...那他為什麼不一口氣多讀點呢,想好久XD 01/15 21:05
→ sarafciel: 我猜啦 一次做兩byte的話 len是奇數時應該要多一個判斷 01/15 21:13
→ sarafciel: 一個一個讀就不會有這個問題 code會簡潔一些XD 01/15 21:13
→ sarafciel: 不過一次多挖幾個進來應該會比較快(?) 這個就看需求 01/15 21:21
→ Lipraxde: 我是想說反正他都用 int,一次讀 4bytes 就可以直接用 01/15 21:40
→ Lipraxde: 的小於 0 做 MSB 的判斷,前後多處理一下 ptr 對齊跟 c 01/15 21:40
→ Lipraxde: ount 01/15 21:40
推 LPH66: MSB 判斷要另外做, 因為這裡判斷的是有無進位出去 01/15 23:07
→ LPH66: 也就是事實上判斷的是比 MSB 再出去一個 bit 01/15 23:07
→ Lipraxde: 判斷完才移出去吧? 01/16 10:54