Здравствуйте. Подскажит кто знает, правильно ли я сделал алгоритм подсчёта CRC16. Алгоритм предполагает универсальность-т.е.полином может быть абсолютно любым. Код (Text): INT16 CRC_16_table[256]; void CRC_16_create_table(INT16 Polinom) { int r; for(int i=0;i<256;i++) { r=((int)i)<<8; for(byte j=0;j<8;j++) { if(r&(1<<15))r=(r<<1)^Polinom; else r=r<<1; } CRC_16_table[i]=r; } } INT16 GetCRC_16(byte *buf, int len) { INT8 crc; crc = 0xFFFF; while(len--) { crc = CRC_16_table[((crc>>8)^*buf++)&0xFF] ^ (crc<<8); } crc ^= 0xFFFF; return crc; } Т.е. для полинома x16 + x15 + x2 + 1,надо будет сделать: CRC_16_create_table(0x8005); Зарранее благодарен, P.S. На википедии есть алгоритмы для CRC16 но они только для конкретных полиномов. Мне же важна универсальность и очень важно то на склько я правильно составил алгоритм.
hawk Вроде правильно. Просто я видел другие алгоритм с обратным порядком бит, но в википедии указан именно ваш вариант.