Мне нужна помощь в проверке значений CRC-16 (также нужна помощь со значениями CRC-32). Я попытался сесть и понять, как работает CRC, но у меня ничего не получается.
Моя первая проблема связана с попыткой использовать онлайн-калькулятор для вычисления сообщения "BD001325E032091B94C412AC
" в CRC16 = 12AC. В документации указано, что последние два октета являются значением CRC16, поэтому я ввожу "BD001325E032091B94C4
" на сайт http://www.lammertbies.nl/comm/info/crc-calculation.html и получите в результате 5A90 вместо 12AC.
Кто-нибудь знает, почему эти значения разные и где я могу найти код для вычисления значений CRC16 и CRC32 (я планирую позже узнать, как это сделать, но время не позволяет прямо сейчас)?
Еще несколько сообщений:
16000040FFFFFFFF00015FCB
3C00003144010405E57022C7
BA00001144010101B970F0ED
3900010101390401B3049FF1
09900C800000000000008CF3
8590000000000000000035F7
00900259025902590259EBC9
0200002B00080191014BF5A2
BB0000BEE0014401B970E51E
3D000322D0320A2510A263A0
2C0001440000D60000D65E54
--Редактировать--
Я добавил больше информации. Документация, на которую я ссылался, - TIA-102.BAAA-A (из стандарта TIA). В документации указано следующее (попытка максимально избежать нарушения авторских прав):
Последний блок в пакете содержит несколько октетов пользовательской информации и / или октетов заполнения, за которыми следует 4-октетная проверка четности CRC. Это называется CRC пакета.
CRC пакета - это 4-октетная проверка циклическим избыточным кодом, закодированная по всем октетам данных, включенным в промежуточные блоки, и октетам пользовательской информации последнего блока. Конкретный расчет выглядит следующим образом.
Пусть k будет общим количеством пользовательской информации и битов заполнения, по которым должен вычисляться CRC пакета. Считайте k битов сообщения коэффициентами полинома M (x) степени k – 1, связывая старший бит нулевого октета сообщения с x ^ k – 1 и младший бит последнего октета сообщения с x ^ 0. Определите порождающий полином GM (x) и полином обращения IM (x).
GM(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
IM(x) = x^31 + x^30 + x^29 + ... + x^2 + x +1
Полином пакета CRC, FM (x), затем вычисляется по следующей формуле.
FM (x) = (x ^ 32 M (x) mod GM (x)) + IM (x) по модулю 2, т.е. в GF (2)
Коэффициенты FM (x) помещаются в поле CRC с MSB нулевого октета CRC, соответствующего x ^ 31, и LSB третьего октета CRC, соответствующего x ^ 0.
В приведенной выше цитате я поставил ^
, чтобы показать полномочия, поскольку форматирование не оставалось прежним при цитировании. Я не уверен, что к чему, но помогает ли это?