CRC32算法笔记
這幾天在研究CRC32的計(jì)算過程,看了CRC算法的原理,也看了不少通過移位法實(shí)現(xiàn)的代碼,但是算出的結(jié)果跟校驗(yàn)工具算的不一致。
折騰了好長(zhǎng)時(shí)間,終于找到一個(gè)手工計(jì)算CRC32的文章,再對(duì)照IEEE 802.3標(biāo)準(zhǔn)的CRC計(jì)算過程,才算把CRC32的計(jì)算搞定。
這里把計(jì)算過程的要點(diǎn)記錄一下:
1) CRC32是CRC算法一種,先參考Wiki上CRC算法的原理和實(shí)例搞明白基本的計(jì)算方法。
2) 最常見的CRC32算法就是IEEE 802.3里生成FCS字段用的那個(gè):
a) CRC32使用的Polynomial是?
b) IEEE 802.3在傳送數(shù)據(jù)時(shí)使用的是最低有效位優(yōu)先 (least significant bit first),所以要根據(jù)你機(jī)器的架構(gòu)轉(zhuǎn)換成有效的比特流輸入。同理,輸出流也一樣。
c) 為了有效識(shí)別輸入流開頭和結(jié)尾的零,開頭的32位要按位取反(complement),最后計(jì)算出的余數(shù)也要按位取反。
按照上述方法計(jì)算能得到想要的CRC32值了。
轉(zhuǎn)載于:https://www.cnblogs.com/a1518915457/p/8848583.html
總結(jié)
- 上一篇: bzoj 3357 [Usaco2004
- 下一篇: 面向对象精要-理解对象