PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 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
判斷完才移出去吧?
繼續閱讀
[問題] 新手reverse linked list debug
Moderator
[問題] 指標轉型
j5128709
[問題] 最近轉用CLion遇到的障礙
jack41402
[心得] exception handling 的實作-personality
descent
Re: [問題] 如何將此程式碼 用迴圈的方式表達
neiltsang
[問題] 使用 callback 的時機
largesperm
[問題] 請益如何避免While迴圈中重啟問題
sweetdance
[問題] 請教ALLEGRO 5使用
Utchi
[問題] C/C++ coding standard
gozule
[心得] Vcpkg+CMake+Qml好用的跨平台編譯環境建
dzwei
Links
booklink
Contact Us: admin [ a t ] ucptt.com