CRC16:
crc = 0;
for(i = 0; i < bits; i++) {
ix = i / 8;
mask = 1 << (7-(i & 7));
xor = (crc & 0x8000) ^ (in[ix] & mask) ? 1 : 0;
crc <<= 1;
if(xor != 0) {
crc ^= 0x1021;
}
crc &= 0xffff;
printf("i %4i in 0x%02X ix %2i mask %3i crc 0x%04X xor 0x%04X\n",
i, in[ix], ix, mask, crc, xor);
}
CRC7:
crc = 0;
for(i = 0; i < bits; i++) {
ix = i / 8;
mask = 1 << (7-(i & 7));
xor = (crc & 0x40) ^ (in[ix] & mask) ? 1 : 0;
crc <<= 1;
if(xor != 0) {
crc ^= 0x9;
}
crc &= 0x7f;
printf("i %2i ix %i mask %3i crc 0x%02X xor 0x%02X res 0x%02X\n",
i, ix, mask, crc, xor, crc*2+1);
}