65,210
社区成员
发帖
与我相关
我的任务
分享
WORD CalculateCRC( buf[2], 1);
//改成
WORD CalculateCRC( buf, 1);
unsigned short crc=CRC_16(SendData,cc);//cc是SendData的长度
const unsigned short cnCRC_16=0x8005; // CRC-16=X16+X15+X2+X0
unsigned long Table_CRC[256]; // CRC 表
// 构造 16 位 CRC 表
void BuildTable16( unsigned short aPoly )
{
unsigned short i, j;
unsigned short nData;
unsigned short nAccum;
for(i=0;i<256;i++ )
{
nData=(unsigned short)(i<< 8 );
nAccum = 0;
for(j=0;j<8;j++ )
{
if ((nData ^ nAccum) & 0x8000 )
nAccum=(nAccum<<1) ^ aPoly;
else
nAccum<<=1;
nData<<=1;
}
Table_CRC[i]=(unsigned long)nAccum;
}
}
// 计算 16 位 CRC 值,CRC-16 或 CRC-CCITT
unsigned short CRC_16( unsigned char * aData, unsigned long aSize )
{
unsigned long i;
unsigned short nAccum=0;
BuildTable16(cnCRC_16); // or cnCRC_CCITT
for(i=0;i<aSize;i++)
nAccum=(nAccum<<8) ^ (unsigned short)Table_CRC[(nAccum>>8) ^ *aData++];
return nAccum;
}
char SendData[];//你要校验的数据
unsigned short crc=CRC_16(SendData,cc);
//crc就是你要的校验码,以前用过的代码,你可以自己整理一下看看