crc校驗(yàn)碼計(jì)算原理 crc16校驗(yàn)代碼中,多項(xiàng)式碼明明是8005為什么要用A001來異或,還有CRC16-REV=A001是什么意思?
crc16校驗(yàn)代碼中,多項(xiàng)式碼明明是8005為什么要用A001來異或,還有CRC16-REV=A001是什么意思?0x8005=10000000000101B0XA001=1010000000001B
crc16校驗(yàn)代碼中,多項(xiàng)式碼明明是8005為什么要用A001來異或,還有CRC16-REV=A001是什么意思?
0x8005=10000000000101B0XA001=1010000000001B與兩個(gè)二進(jìn)制高位和低位相比,完全相反。CRC校驗(yàn)分為正向校驗(yàn)和反向校驗(yàn)。正向檢查的高位在左側(cè),反向檢查的低位在左側(cè)。例如,當(dāng)正向CRC校驗(yàn)的數(shù)據(jù)為0xaf5d=1010 1111 0101 1101b和0x8005的異或時(shí),應(yīng)為0xaf5d^0x8005,使用0xa001校驗(yàn)時(shí),0xaf5d的高低位順序應(yīng)為0xbaf5=1011 1010 1111 0101b。正向校驗(yàn)使用左移位,反向校驗(yàn)使用右移位。其實(shí)原理是一樣的。它取決于數(shù)據(jù)的高位和低位的順序。
用查表發(fā)實(shí)現(xiàn)crc16校驗(yàn)怎么實(shí)現(xiàn)?
1)將最后一個(gè)CRC校驗(yàn)碼向右移動(dòng)一個(gè)字節(jié);(2)將移出的字節(jié)與要校驗(yàn)的新字節(jié)異或;(3)在預(yù)生成的代碼表中對(duì)計(jì)算值進(jìn)行索引,以獲得相應(yīng)的值(稱為余數(shù));(4) 將所獲得的值與在步驟(1)(5)中移到右邊的值異或,如果要檢查的數(shù)據(jù)已經(jīng)被處理,則步驟(4)的結(jié)果是最終的CRC檢查碼。如果仍有數(shù)據(jù)要處理,請(qǐng)轉(zhuǎn)至步驟(1)以運(yùn)行。CRC32=CRC u32 utbl[(CRC32^((unsigned uuu8*)P)[i]&0xff]^(CRC32>>8)?這很簡(jiǎn)單。