unsigned int CMIS_computerDlg::calcrc( unsigned char *ptr, int count ) //求crc的calcrc函数,ptr是指向字符数组的指针
{ //count是求crc的数据个数,while循环的次数
int i;
//unsigned char crc[2], *w;
//crc[2]='\0';
unsigned int crc; //要返回的crc 16位的
unsigned char crc1, crc2, crc3; //指向数组中连续的三个字符 8位的
crc1 = *ptr++ ;
crc2 = *ptr++ ;
while (--count >= 0) {
crc3 = *ptr++ ; //在while中补充下一个字符(8个bit)
for (i = 0; i {
if (crc1 & 0x80) //判断crc1高位是否为1
{
crc1 = crc1 < if(crc2 & 0x80) //判断crc2高位是否为1
{
crc1=crc1 | 0x01; //crc1低位由0变1
}
crc2 = crc2 < if(crc3 & 0x80) //判断crc3高位是否为1
{
crc2=crc2 | 0x01; //crc2低位由0变1
}
crc3=crc3<<1; //移出高位
crc1=crc1 ^ 0x10; //前8bit与0x10异或
crc2=crc2 ^ 0x21; //后8bit与0x21异或
}
else //如果crc1高位不是1,只移位致意不做异或
{
crc1 = crc1 < if(crc2 & 0x80)
{
crc1=crc1 | 0x01;
}
crc2 = crc2 < if(crc3 & 0x80)
{
crc2=crc2 | 0x01;
}
crc3=crc3<<1;
}
}//for
}//while
crc=(crc1<<8)+crc2; //*********************8
return crc;
}