标题: CRC16节约空间的计算方法 [打印本页]

作者: kerty80    时间: 2018-5-17 17:05
标题: CRC16节约空间的计算方法
// 计算CRC16的值
unsigned short CRC16(unsigned char *nData, unsigned short wLength)
{
  unsigned short static const CRC16tbl[16]={ // CRC余式表
    0x0000,0xCC01,0xD801,0x1400,0xF001,0x3C00,0x2800,0xE401,
    0xA001,0x6C00,0x7800,0xB401,0x5000,0x9C01,0x8801,0x4400
  };
  unsigned short wCRCWord=0xffff;
  unsigned char  da;
  while(wLength--)
  {
    da = wCRCWord^*nData;
    wCRCWord >>= 4;
    wCRCWord ^= CRC16tbl[da&0x0f];
    da = wCRCWord^((*nData)>>4);
    wCRCWord >>= 4;
    wCRCWord ^= CRC16tbl[da&0x0f];
    nData++;
  }
  return wCRCWord;
}

作者: little4_su    时间: 2018-11-5 13:17
待校验的信息流
unsigned char c[] = {0x55,0xAA,0x00,0x01,0x04,0x15,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
用这个函数校验出来的结果是0x3c34,这是正确的。
其实我更想知道CRC16tbl[16]这张表示如何来的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1