short crc; int c, i; unsigned char byte; unsigned char crcbit; unsigned char databit; // init to all ones crc = 0xFFFF; for (c = 0; c < length; c++) { byte = data[c]; for (i = 0; i < 8; i++) { crcbit = (crc & 0x8000) ? 1 : 0; databit = (byte & 0x80) ? 1 : 0; crc = crc << 1; byte = byte << 1; if (crcbit != databit) crc = crc ^ 0x1021; } }