hedgeov: (Default)
hedgeov ([personal profile] hedgeov) wrote2012-06-04 03:25 pm

Подсчет CRC-16 CCITT без циклов

Набрел на такой вот код для подсчета CRC-16 CCITT без таблиц и циклов. Только сдвиги. (отсюда http://www.embeddedrelated.com/groups/msp430/show/29689.php)


void crc_ccitt_init(void)
{
crc = 0xffff;
}

void crc_ccitt_update(unsigned char x)
{
unsigned crc_new = (unsigned char)(crc >> 8) | (crc << 8);
crc_new ^= x;
crc_new ^= (unsigned char)(crc_new & 0xff) >> 4;
crc_new ^= crc_new << 12;
crc_new ^= (crc_new & 0xff) << 5;
crc = crc_new;
}

unsigned int crc_ccitt_crc(void)
{
return crc;
}

[identity profile] hedgeov.livejournal.com 2012-06-04 11:33 am (UTC)(link)
Понятно же, что под таблицей мною подразумевалось uint16_t coolCRC16Table[256]; :-)
Ну есть проблема, что широко распространены полиномы мало того, что разные, так еще и нифига не оптимальные.