专注

导航

ModBus RTU协议CRC校验方式最简实现

   1:          /// <summary>
   2:          /// 计算CRC校验码(0:地位,1:高位)
   3:          /// </summary>
   4:          /// <param name="byteData">输入参数:CRC值</param>
   5:          /// <returns>返回值:byte[],2位,0:地位,1:高位</returns>
   6:          public static byte[] GetCRC(byte[] byteData)
   7:          {
   8:              byte[] CRC = new byte[2];
   9:              UInt16 wCrc = 0xFFFF;
  10:              for (int i = 0; i < byteData.Length; i++)
  11:              {
  12:                  wCrc ^= Convert.ToUInt16(byteData[i]);
  13:                  for (int j = 0; j < 8; j++)
  14:                  {
  15:                      if ((wCrc & 0x0001) == 1)
  16:                      {
  17:                          wCrc >>= 1;
  18:                          wCrc ^= 0xA001;//异或多项式
  19:                      }
  20:                      else
  21:                      {
  22:                          wCrc >>= 1;
  23:                      }
  24:                  }
  25:              }
  26:              CRC[1] = (byte)((wCrc & 0xFF00) >> 8);//高位在后
  27:              CRC[0] = (byte)(wCrc & 0x00FF);       //低位在前
  28:              return CRC;
  29:          }

posted on 2012-01-05 01:21  陈啊M  阅读(2087)  评论(0编辑  收藏  举报