CRC-16校验结果由两个因素确定,一个是初始值,一个是多项式。初始值范围0x0000到0xFFFF,多项式的范围0x1001到0xFFFF,下面是简单的代码: WWW_PL※CJS_COM-PLC-技.术_网
unsigned short CTestCRC16Dlg::CRC16(unsigned short WW.W_PLC※JS_C,OM-PL,C-技.术_网
usStartValue, unsigned short usPolynomial,BYTE *pby, int ilen) plcjs.技.术_网
{ W1WW_P4LCJS_COM-PLC-技.术_网
ASSERT(pby != NULL || ilen > 0); WW.W_PLC※JS_C,OM-PL,C-技.术_网
unsigned short usCRC16 = usStartValue; plcjs.技.术_网
unsigned short usTemp1 = 0; WWW_PL※CJS_COM-PLC-技.术_网
unsigned short usTemp2 = 0; WWW_P※LCJS_COM-PLC-)技.术_网
unsigned short usFlag = 0; WW.W_PLCJS_COM-PLC-技.术_网
BYTE byTemp = 0x00; WW.W_PLCJS_COM-PLC-技.术_网
int i=0; P.L.C.技.术.网——可编程控制器技术门户
int j=0; WWW_PLCJS_COM-PLC-技.术_网
for(i=0; i<ilen; i++) WW.W_PLCJS_COM-PLC-技.术_网
{ WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
byTemp = pby【i】; WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
usCRC16 = usCRC16^byTemp; WWW.PLCJS.COM——可编程控制器技术门户
for(int j=0; j<8; j++) WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
{ WWW.PLCJS.COM——可编程控制器技术门户
usFlag = usCRC16&0x0001; WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
usTemp1 = (usCRC16>>1); P.L.C.技.术.网——可编程控制器技术门户
if(usFlag == 0) W1WW_P4LCJS_COM-PLC-技.术_网
{ WW.W_PLCJS_COM-PLC-技.术_网
usTemp2=0; WWW.PLCJS.COM——可编程控制器技术门户
} plcjs.技.术_网
else WWcW_PLCJS_COM-PLC-技.术_网
{ WWW_PL※CJS_COM-PLC-技.术_网
usTemp2 = usPolynomial; WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
} WW.W_PLCJS_COM-PLC-技.术_网
usCRC16 = usTemp1^usTemp2; WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
} WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
} WWW_PLCJS_COM-PLC-技.术_网
return usCRC16; P.L.C.技.术.网——可编程控制器技术门户
} P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
参数说明: WWW_PLC※JS_COM-PmLC-技.术_网
usStartValue:开始值。 WWW_PLCJS_COM-PLC-技.术_网
usPolynomial:多项式值。 WWW_PLCJS_COM-PLC-技.术_网
pby:待校验的数据。 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
ilen:校验字节数。 ——可——编——程——控-制-器-技——术——门——户
返回值:CRC 16位校验。 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
上面就是万能CRC-16的校验方法了,只要把相应的开始值和多项式值通过参数传入即可。