#define POLYNOMIAL 0x1021 #define WIDTH (8 * sizeof(resultType)) #define MSb ((resultType)1 << (WIDTH - 1)) resultType crc(const readType * data, unsigned n, resultType remainder) { unsigned pos; unsigned char bitp; for (pos = 0; pos != n; pos++) { remainder ^= ((resultType)data[pos] << (WIDTH - 8)); for (bitp = 8; bitp > 0; bitp--) { if (remainder & MSb) { remainder = (remainder << 1) ^ POLYNOMIAL; } else { remainder <<= 1; } } } return remainder; }