CRC16 -MODUSB //CRC16-2
unsigned int _CRC16MODUSB(unsigned char *ptr, unsigned char len)
{
unsigned int crc_reg = 0xffff;
unsigned int poly = 0xa001;
for (uint i = 0; i < len; i++)
{
unsigned int data = *(ptr++) & 0xff;
crc_reg ^= data;
for (uint j = 0; j < 8; j++)
{
crc_reg = (((uchar)crc_reg) & 1) ? ((crc_reg >> 1) ^ poly) : (crc_reg >> 1);
}
}
return crc_reg;
}
CRC16-IBM //CRC16-1
unsigned int _CRC16IBM(unsigned char *ptr, unsigned char len)
{
unsigned int crc = 0;
for (uint j = 0; j < len; j++)
{
uchar b = *ptr++;
for (uchar i = 0; i < 8; i++)
{
crc = ((b ^ (uchar)crc) & 1) ? ((crc >> 1) ^ 0xA001) : (crc >> 1);
b >>= 1;
}
}
return crc;
}
// from http://forums.codeguru.com/showthread.php?433491-Crc-16-ibm