Мне нужно рассчитать контрольную сумму CRC-5, как указано в стандарте пассивного RFID-протокола EPC (UHF Class 1 Gen 2 Standard). Я намерен использовать оптимизированный компьютер CRC от Boost для расчетов, но мне трудно сопоставить информацию из спецификации EPC с параметрами компьютерного шаблона crc:
template < std::size_t Bits, impl_def TruncPoly,
impl_def InitRem, impl_def FinalXor,
bool ReflectIn, bool ReflectRem >
Определение CRC 5 из стандарта EPC можно найти в таблице 6.12:
Приложение F содержит эту дополнительную информацию:
Первый параметр шаблона (биты), очевидно, 5, и я предполагаю, что TruncPoly должен быть 0x09 (из википедия), но я мог бы действительно использовать некоторые советы для отдыха.
После еще нескольких поисков я нашел это: http://reveng.sourceforge.net/crc-catalogue/1-15.htm#crc.cat-bits.5
Он предоставляет следующую информацию (скопирован, чтобы она не исчезла):
В случае, если это не ясно видно, соответствующая информация:
width = 5 poly = 0x09 init = 0x09 refin = false refout = false xorout = 0x00
check = 0x00 name = «CRC-5 / EPC»
Как видите, они не только предоставляют необходимую информацию, но и тщательно ссылаются на свои источники, поэтому я могу рекомендовать перейти по ссылке, если вы работаете с этим.
Чтобы ответить на мой собственный вопрос, определение boost crc-5-epc становится:
boost::crc_optimal<5, 0x09, 0x09, 0x00, false, false> crc_5_epc;