如标题是标准型的,非标准的看读者按实际情况来,不要拿来就用。
1.校验和(返回一个字节)
/*-------------------------------------------------------------------------------------------
函数名 : Check
函数功能 : 校验和,前n个字节数据之和模256
返回类型 : unsigned char
函数参数 : unsigned char *buf, int len
创建日期 : 2011.12.27
修改 :
-------------------------------------------------------------------------------------------*/
unsigned char Check(unsigned char *buf, int len)
{
int iSum = 0;
int iTemp = 0;
CString str;
for (int i = 0;i < len;i++)
{
iSum += buf[i];
}
iSum %= 0x100;
return (unsigned char)iSum;
}
2.异或校验(返回一个字节)
unsigned char CheckXor(char *strData,int len)
{
char checksum = 0;
for (int i = 0;i < len;i++)
{
checksum = checksum ^ strData[i];
}
return (unsigned char)checksum;
}
3.CRC校验(返回2个字节,高字节在前,低字节在后)
unsigned short int CRC(unsigned char *buf, int leng)
{
//CRC校验
unsigned short int Reg,temp,Crccode,i,j;
Reg = 0xFFFF;
Crccode = 0xA001;
for ( i=0;i<leng;i++ )
{
Reg ^= *(buf+i);
for ( j=0;j<8;j++ )
{
temp=Reg&0x0001;
Reg=Reg>>1;
if( temp==0x0001 )
Reg^=Crccode;
}
}
return (Reg<<8 | Reg>>8);
}
4.LRC校验(返回一个字节)
unsigned char LRC(unsigned char *auchMsg, unsigned short usDataLen)
{
unsigned char uchLRC=0;
while(usDataLen--)
{
uchLRC+=*auchMsg++;
}
return ((unsigned char)(-((char)uchLRC)));
}
5. 补码求和(返回一个字节)
/*-------------------------------------------------------------------------------------------
函数名 : Check
函数功能 :
返回类型 : unsigned char
函数参数 : unsigned char *buf, int len
创建日期 : 2013.12.10
修改 :
-------------------------------------------------------------------------------------------*/
unsigned char Check(unsigned char *buf, int len){int iSum = 0;int iTemp = 0;CString str;for (int i = 0;i < len;i++){iSum += buf[i];}iSum = 256 -
iSum;return (unsigned char)iSum;}