[an error occurred while processing this directive]
|
остатков от деления на неприводимые многочлены. Например:
для каждого переданного/принятого бита сделать:
...
CRC = docrc( bit);
...
где:
unsigned short
docrc( unsigned char bit )
{
static unsigned short crc = 0;
crc = docrcbit(bit?1:0, crc);
return crc;
}
static unsigned short
docrcbit( unsigned char bit, unsigned short crc )
{
int t = bit ^ ((crc & 0x8000)? 0x01: 0x00);
crc <<= 1;
if (t) crc ^= 0x8005;
return crc;
}
Тгда после передачи некого количества битиков получит 16и битное число, которое достаточно уникально для данной последовательности.
В конце последовательности надо передать CRC и сравнить полученую с вычисленой на приемной стороне. Это - crc16.
Есть так же то же самое crc32. Описания этих "алгоритмов" можно найти легко в сети.
E-mail: info@telesys.ru