【C#】CRC16校验

/// <summary>
/// CRC16校验
/// </summary>
/// <param name="buffer">数组</param>
/// <param name="buflen">数组字节长度</param>
/// <param name="sidx">帧开头</param>
/// <param name="endidx">帧结尾</param>
/// <returns></returns>
public UInt16 CRC16(byte[] buffer, int buflen, int sidx, int endidx)
{
  ushort crc = 0;
  try
  {
      if (buffer == null || buffer.Length == 0) return 0;
      if (endidx < sidx)
          endidx += buflen;
      for (int i = sidx; i < endidx; i++)
      {
          if (i < buflen)
              crc ^= buffer[i];
          else
              crc ^= buffer[i % buflen];
          for (int j = 0; j < 8; j++)
          {
              if ((crc & 1) > 0)
                  crc = (ushort)((crc >> 1) ^ 0xA001);
              else
                  crc = (ushort)(crc >> 1);
          }
      }
  }
  catch (Exception ex)
  {
      DebugOutput.ProcessMessage(string.Format("[ERROR] ex{0}", ex.Message));
  }
  return crc;
}
posted @   qiutian-hao  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示