求crc的calcrc函数

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   <   8;   ++i)   
  {   
                                  if   (crc1   &   0x80)                             //判断crc1高位是否为1   
  {   
                                          crc1   =   crc1   <<   1;                   //移出高位   
  if(crc2   &   0x80)                       //判断crc2高位是否为1   
  {   
  crc1=crc1   |   0x01;           //crc1低位由0变1   
  }   
  crc2   =   crc2   <<   1;                   //移出高位   
  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   <<   1;   
  if(crc2   &   0x80)   
  {   
  crc1=crc1   |   0x01;   
  }   
  crc2   =   crc2   <<   1;   
  if(crc3   &   0x80)   
  {   
  crc2=crc2   |   0x01;   
  }   
  crc3=crc3<<1;   
  }   
  }//for       
          }//while   
  crc=(crc1<<8)+crc2;                 //*********************8   
  return   crc;   
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值