//CRC16校验
ushort CRC16Valid(const TByteDynArray buffer, int len)
{
ushort crc = 0, tmp;
int index = 0;
while(len--)
{
tmp = buffer[index++];
crc = crc ^ (tmp <<8);
for (int i = 0; i < 8;i++)
{
if (crc & 0x8000)
crc = (crc <<1) ^ 0x1021;
else
crc <<= 1;
}
}
crc = (crc >> 8) | (crc<< 8);
return(crc);
}
//---------------------------------------------------------------------------
//CRC16校验
ushort CRC16Valid(const uchar* buffer, int len)
{
ushort crc = 0, tmp;
while(len--)
{
tmp = *buffer++;
crc = crc ^ (tmp <<8);
for (int i = 0; i < 8;i++)
{
if (crc & 0x8000)
crc = (crc <<1) ^ 0x1021;
else
crc <<= 1;
}
}
crc = (crc >> 8) | (crc<< 8);
return(crc);
}
//异或校验
void XORValid(const TByteDynArray buffer, int len)
{
char checksum = 0, cr = 13, ln =10;
char ch1,c1; //校验位的高四位和第四位
for (int i = 0; i<len; i++)
{
checksum = checksum ^buffer[i+1]; //进行异或交验取值
}
ch1 = (checksum >> 4) & 0x0F; //取高位数;
c1 = checksum & 0x0F; //取低位数;
if (ch1 < 10) //低于10的数
ch1 = ch1 + '0';
else
ch1 = (ch1 - 10 ) + 'A'; //不低于10的16进制数,如:A、B、C、D、E、F
if (c1 < 10)
c1 = c1 + '0';
else
c1 = (c1 - 10 )+ 'A';
XOR_High=ch1;
XOR_Low =c1;
}
//-----------------------------------------------------------------------------
//异或校验
void XORValid(const uchar* buffer, int len)
{
charchecksum = 0, cr = 13, ln = 10;
charch1,c1; //校验位的高四位和第四位
for (inti = 0; i<len; i++)
{
checksum = checksum ^ buffer[i+1]; //进行异或交验取值
}
ch1 =(checksum >> 4) & 0x0F; //取高位数;
c1 =checksum & 0x0F; //取低位数;
if (ch1< 10) //低于10的数
ch1= ch1 + '0';
else
ch1= (ch1 - 10 ) + 'A'; //不低于10的16进制数,如:A、B、C、D、E、F
if (c1 < 10)
c1 = c1 + '0';
else
c1 = (c1 - 10 )+ 'A';
XOR_High=ch1;
XOR_Low =c1;
}