Вот здесь тренируюсь:
http://crccalc.com/
Почитал здесь для просветления в тонких местах:
https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%...%BA%D0%BE%D0%B4
Ввожу число: 00000000 Hex, вычисляю CRC-32. Для CRC-32/MPEG-2 вижу результат 0xC704DD7B.
Добавляю его к данным: 00000000 C704DD7B
Вычисляю, получаю CRC-32/MPEG-2 0x00000000.
Здесь все понятно, поскольку биты входных данных и результата не реверсируются и выход не инвертируется. С инверсией выхода тоже понятно.
А как дополнить данные, если делается реверс битов? Что добавить к данным 00000000, чтобы результат стал 0x00000000? Что-то не получается.
Разобрался. Для RefIn true, RefOut true, XorOut 0xFFFFFFFF нужно CRC инвертировать и изменить порядок байтов (не битов!).
Для 00000001 CRC-32 = 0x5643EF8A, инверсия: 0xA9BC1075, перестановка байтов: 0x7510BCA9
Для 00000001 7510BCA9 CRC-32 = 0xFFFFFFFF
Почему так? Нет ли ошибки в расчетах на сайте?
Данные можно задавать в поле в таком виде:
00 00 00 01
По байтам. Ничего не меняется.
Ага, значит, CRC работает с байтами. Поэтому результат CRC нужно просто разбить на байты. Но почему тогда CRC без реверса битов не требует перестановки байтов?