crc16 modbus校验亲测可用

unsigned short crc(unsigned char addr)
{
  int i,j;
  unsigned tmp = 0xffff;
  unsigned char buff[6] = {0, 0x03, 0x00, 0x00, 0x00, 0x02};
  buff[0] = addr;

  for(i=0; i<6; i++)
  {
    tmp = buff[i]^tmp;
    for(j=0; j<8; j++)
    {
      if(tmp&0x01)
      {
        tmp = tmp>>1;
        tmp = tmp^0xA001;
      }
      else
      {
        tmp = tmp>>1;
      }
    }
  }
  return tmp;
}

 

返回的是16位的数

校验低八位 :tmp&0xFF;

校验高八位:tmp>>8;

上一篇:0x7b38f6e0 (ucrtbased.dll)处(位于.exe 中)引发的异常: 0xc0000005读取位置 0x00


下一篇:算法竞赛进阶指南 0x00