共享一个万能CRC校验的方法 点击:1412 | 回复:2



工控豪杰

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 5回
  • 年度积分:0
  • 历史总积分:56
  • 注册:2008年5月28日
发表于:2008-05-30 14:10:20
楼主
CRC-16校验结果由两个因素确定,一个是初始值,一个是多项式。初始值范围0x0000到0xFFFF,多项式的范围0x1001到0xFFFF,下面是简单的代码:

unsigned short CTestCRC16Dlg::CRC16(unsigned short
usStartValue, unsigned short usPolynomial,BYTE *pby, int ilen)
{
ASSERT(pby != NULL || ilen > 0);
unsigned short usCRC16 = usStartValue;
unsigned short usTemp1 = 0;
unsigned short usTemp2 = 0;
unsigned short usFlag = 0;
BYTE byTemp = 0x00;
int i=0;
int j=0;
for(i=0; i<ilen; i++)
{
byTemp = pby【i】;
usCRC16 = usCRC16^byTemp;

for(int j=0; j<8; j++)
{
usFlag = usCRC16&0x0001;
usTemp1 = (usCRC16>>1);
if(usFlag == 0)
{
usTemp2=0;
}
else
{
usTemp2 = usPolynomial;
}

usCRC16 = usTemp1^usTemp2;
}
}

return usCRC16;
}
参数说明:
usStartValue:开始值。
usPolynomial:多项式值。
pby:待校验的数据。
ilen:校验字节数。
返回值:CRC 16位校验。

上面就是万能CRC-16的校验方法了,只要把相应的开始值和多项式值通过参数传入即可。



yjd159

  • 精华:0帖
  • 求助:0帖
  • 帖子:16帖 | 312回
  • 年度积分:0
  • 历史总积分:417
  • 注册:2007年3月03日
发表于:2008-05-30 14:21:05
1楼
啥叫万能的啊?晕死,还有不是万能的么?16位的crc校验就这么一种!!!

StoneChen

  • 精华:0帖
  • 求助:0帖
  • 帖子:25帖 | 330回
  • 年度积分:0
  • 历史总积分:852
  • 注册:2003年10月23日
发表于:2008-06-05 17:07:42
2楼
引用yjd159 的回复内容:啥叫万能的啊?晕死,还有不是万能的么?16位的crc校验就这么一种!!!




热门招聘
相关主题

官方公众号

智造工程师