Вывод вычисления CRC

Является ли 0 возможной контрольной суммой для проверки циклическим избыточным кодом (CRC)?

Я использую boost для расчета 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?

person Dylan Klomparens    schedule 29.04.2011    source источник


Ответы (1)


да. Возьмите любое сообщение, x, и вычислите его CRC, crc(x). Тогда crc(x . crc(x)) будет 0 (где . обозначает конкатенацию).

На самом деле это отношение можно использовать для проверки правильности передачи сообщения + CRC (см., например, вторую анимированную диаграмму на странице http://en.wikipedia.org/wiki/Computation_of_CRC).

person Oliver Charlesworth    schedule 29.04.2011
comment
Тогда crc(x . crc(x)) будет равно 0. Это верно только для базового алгоритма CRC, без инвертирования битов или реверсирования битов. См. этот пост для получения более подробной информации: > stackoverflow.com/questions/5112733/ - person Nayuki; 16.07.2011