2011-04-29 2 views
1

Est-ce que 0 est une somme de contrôle possible pour un contrôle de redondance cyclique (CRC)?Sortie de calcul du CRC

J'utilise un coup de pouce pour le calcul CRC:

const unsigned int CrcPolynomial = 0x11021; 
const unsigned short InitialValue = 0xffff; 
boost::crc_optimal<16, CrcPolynomial, InitialValue, 0, true, true> Crc; 
// process some bytes... 
int x = Crc.checksum(); // <------ can this be 0? 

Répondre

3

Oui. Prenez n'importe quel message, x, et calculez son CRC, crc(x). Alors crc(x . crc(x)) sera 0 (où . indique la concaténation). En fait, cette relation peut être utilisée pour vérifier qu'un message + CRC a été transmis correctement (voir par exemple le deuxième diagramme animé au http://en.wikipedia.org/wiki/Computation_of_CRC).

+0

"Alors crc (x, crc (x)) sera 0". Cela n'est vrai que pour l'algorithme CRC de base, sans nier les bits ou inverser les bits. Voir cet article pour plus de détails: http://stackoverflow.com/questions/5112733/checking-crc32-of-zero-padded-bitstream/6672972#6672972 – Nayuki