вот вариант без таблиц, думаю, не составит труда разобраться (наверное).
Код:unsigned long crc_octets(const unsigned char *octets, int len) { unsigned long crc = 0xFFFFFFFF; unsigned long temp; int j; while (len--) { temp = (unsigned long)((crc & 0xFF) ^ *octets++); for (j = 0; j < 8; j++) { if (temp & 0x1) temp = (temp >> 1) ^ 0xEDB88320; else temp >>= 1; } crc = (crc >> 8) ^ temp; } return crc ^ 0xFFFFFFFF; }




).
