// 计算给定长度数据的16 位CRC。
U16 GetCrc16(const U8* pData, int nLength)
{
U16 fcs = 0xffff; // 初始化
while(nLength>0){
fcs = (fcs >> 8) ^ crctab16[(fcs ^ *pData) & 0xff];
nLength--;
pData++;
}
return ~fcs; // 取反
}crctab16[]是一个数组,部分数组如下:
static const U16 crctab16[] =
{
0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF,0X8C48, 0X9DC1,
0XAF5A, 0XBED3, 0XCA6C,
0XDBE5, 0XE97E, 0XF8F7,0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 0X75B7,
0X643E,0X9CC9, 0X8D40,......}