Filling with zeros in the front should not change the result. Calculation of CRC is essentially a binary long division. Unfortunately, this is due to the splitting of each byte. It is easy with shift operators and bitwise or.
, , CRC - . , CRC .
. 11 11101110111 CRC, , 00000111 01110111 = 0x777, , 0x7770, CRC.
, , , CRC , ,
1 0 1 = 5
-------------
1 0 0 1 1 / 1 1 0 1 1 0 1
1 0 0 1 1 | |
--------- | |
1 0 0 0 0 |
0 0 0 0 0 |
--------- |
1 0 0 0 0 1
1 0 0 1 1
---------
1 1 1 0 = 14 = remainder
,
1 0 1 = 5
---------------
1 0 0 1 1 / 0 1 1 0 1 1 0 1
1 0 0 1 1 | |
--------- | |
1 0 0 0 0 |
0 0 0 0 0 |
--------- |
1 0 0 0 0 1
1 0 0 1 1
---------
1 1 1 0 = 14 = remainder
.
, , , , , , < >
-
, . , CRC CRC-CCITT FFFF. , 0x0FFF CRC-CCIT 0, 0x0ECE, CRC-CCIT 0xFFFF 0x0000, 0x1D0F, xor 0x0ECE xor 0x1D0F = 0x13C1.
CRC 0 , ( , ), , .
, . n, p (x) = x ^ (n - 1) + x ^ (n - 2)... + x + 1. CRC k p (x) x ^ k mod CRC. x ^ k mod CRC . GF (2) .
. , , | pad | FFFF ( , , , 16 32 ( crc.
, CRC-CCIT 0xFFFF 0 0xF7EF. x ^ (- 1) mod CRC , * x ^ (- k) mod CRC . GF (2) . NTL , , , , . 32- crcs exhjaustive search, , , .
, , . , , , , 0 , 8, 16 32 , , , -, LFSR , . , galois, : LFSR .
, CRC-CCITT (0xFFFF) 11 11 11101110111, 5 0, 00000111 01110111, LFSR , 0xF060. ( , ).
, LSFR ( ) IV 0xF060 0x0fff, , LFSR IV 0xFFFF 11 .