Описание тега crc
Циклический контроль избыточности (CRC) - это код обнаружения ошибок, обычно используемый в цифровых сетях и устройствах хранения для обнаружения случайных изменений необработанных данных.
Циклический контроль избыточности (CRC) - это код обнаружения ошибок, обычно используемый в цифровых сетях и устройствах хранения для обнаружения случайных изменений необработанных данных. К блокам данных, поступающим в эти системы, прикрепляется короткое контрольное значение, основанное на остатке от полиномиального деления их содержимого; при извлечении расчет повторяется, и можно предпринять корректирующие действия против предполагаемого повреждения данных, если контрольные значения не совпадают. википедия
Наиболее часто используемые полиномиальные длины:
- CRC-8: 9 бит
- CRC-16: 17 бит
- CRC-32: 33 бита
- CRC-64: 65 бит
Поистине превосходным учебником по CRC является "Безболезненное руководство по алгоритмам обнаружения CRC" Росс Уильямс, которое также можно найти здесь, здесь, здесь, здесь и здесь.
Прежде чем задать вопрос о CRC, проверили ли вы сначала:
- Какой алгоритм CRC обсуждается?
- Укажите конкретный источник вашей CRC. Если вы спрашиваете об Ethernet CRC-32, так и скажите. Если вы спрашиваете о Castagnoli CRC-32C, так и скажите.
- В Википедии существует каталог параметров CRC и список полиномов CRC, которые можно использовать для обозначения более экзотических образцов.
- Убедитесь, что выбрали правильный тег.
- Полиномиальной: Является ли многочлен правильно?
- Это бит-реверс?
- Это байтовый обмен?
- Это дополняется?
- Инициализация: правильно ли инициализирована CRC?
- Некоторые инициализируются нулями, некоторые - единицами, а некоторые - чем-то совершенно другим. Убедитесь, что у вас правильная инициализация.
- Для ненулевой инициализации имеет значение, будет ли сообщение передано через сдвиговый регистр или просто обработано XOR для его вывода.
- Обработка:
- Правильно ли выполняется CRC-проверка данных с перестановкой байтов?
- Вы движетесь в правильном направлении?
- Используете ли вы какие-либо встроенные функции CRC, например Intel SSE4.2?
crc32
инструкция? - Правильна ли ваша таблица поиска для выбранного полинома и порядка байтов?
- Завершение: правильно ли оформлен CRC?
- Некоторые схемы CRC требуют, чтобы результат полинома был подвергнут XOR с определенной константой, например
0xFFFFFFFF
, а некоторые нет. - Вывод CRC может быть инвертирован в вашей реализации.
- Некоторые схемы CRC требуют, чтобы результат полинома был подвергнут XOR с определенной константой, например