2011-01-21 237 views
1

我正在從http://www.ross.net/crc/download/crc_v3.txt工作,並使用16位多項式0x8005CRC16計算不太正確

我的留言是0xAE

該網站http://www.lammertbies.nl/comm/info/crc-calculation.html從我擁有的其他數據生成正確的計算。

這是我的代碼的輸出,描述每一步。

Poly: 1010000000000001 
Initial message: 01110101 
Message: 011101010000000000000000 24 
crcreg: 0000000000000000 
crcreg: 0000000000000001 
crcreg: 0000000000000011 
crcreg: 0000000000000111 
crcreg: 0000000000001110 
crcreg: 0000000000011101 
crcreg: 0000000000111010 
crcreg: 0000000001110101 
crcreg: 0000000011101010 
crcreg: 0000000111010100 
crcreg: 0000001110101000 
crcreg: 0000011101010000 
crcreg: 0000111010100000 
crcreg: 0001110101000000 
crcreg: 0011101010000000 
crcreg: 0111010100000000 
crcreg: 1110101000000000 
crcreg: 1101010000000000 //Here we had a 1 pop off the shift reg, so we XOR in the poly. 
^poly: 1010000000000001 
=crcreg:0111010000000001 

crcreg: 1110100000000010 
crcreg: 1101000000000100 
^poly: 1010000000000001 
=crcreg:0111000000000101 

crcreg: 1110000000001010 
crcreg: 1100000000010100 
^poly: 1010000000000001 
=crcreg:0110000000010101 

crcreg: 1100000000101010 
crcreg: 1000000001010100 
^poly: 1010000000000001 
=crcreg:0010000001010101 

CRC: 0010000001010101 

4 aa 
R-CRC: 1010101000000100 //Reversed, just in case MSB/LSB display got hosed. 

55 20 

預期CRC16是0xBC81

回答

2

你多項式相反:您需要爲x的更高的權力系數由最左邊位表示。嘗試顛倒多項式的位(表示爲1000000000000101),我想你會得到正確的結果。

您可能還需要反轉輸入和輸出,具體取決於您使用的CRC的特定實現方式(LSB優先還是MSB優先)。

+0

+1。這個CRC16是在第15部分末尾註明的那個:輸入被反映(你已經反映了)並且輸出也被反映(即預期'1000000100111101')。但是多項式不應該被反映出來。 –

+0

我匹配的CRC實現是LSB優先。 –