Я к реализации CRC24C расчета с использованием алгоритма среза по 8. Я успешно реализовал для случая, когда число битов данных кратно 8. Однако, когда количество входных битов не кратно 8, алгоритм среза на 8 не работает. Я планирую разделить биты данных на две части, одна часть содержит # битов данных, кратных 8, а другая часть содержит оставшиеся биты. рассчитать CRC24C индивидуально и объединить его. Однако я не могу найти способ объединить два индивидуально рассчитанных CRC. Любые предложения или идеи будут очень полезны.
Вы можете использовать простую функцию для вычисления первых нескольких и / или последних нескольких бит CRC, в зависимости от того, как ваши данные размещены в памяти. Я не знаю, какой 24-битный CRC вы используете, но для этого:
width=24 poly=0x864cfb init=0xb704ce refin=false refout=false xorout=0x000000 check=0x21cf02 residue=0x000000 name="CRC-24"
этот код C будет обновляться crc
с высоким bits
биты в младшем байте val
:
unsigned crc24_rem(unsigned crc, unsigned val, unsigned bits) {
val &= 0x100 - (0x100 >> bits) ;
crc ^= (unsigned)val << 16;
while (bits--)
crc = crc & 0x800000 ? (crc << 1) ^ 0x864cfb : crc << 1;
crc &= 0xffffff;
return crc;
}
Ты можешь использовать crcany генерировать такой код для любого определения CRC.
Других решений пока нет …