码迷,mamicode.com
首页 > Windows程序 > 详细

HJ212 CRC 16 (C#)

时间:2019-02-17 23:35:37      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:har   算法   cto   orm   for   eth   sha   tree   href   

算法

  1. CRC16 校验寄存器赋值为 0xFFFF;
  2. 取被校验串的第一个字节赋值给临时寄存器;
  3. 临时寄存器与 CRC16 校验寄存器的高位字节进行“异或”运算,赋值给 CRC16 校验寄存器;
  4. 取 CRC16 校验寄存器最后一位赋值给检测寄存器;
  5. 把 CRC16 校验寄存器右移一位;
  6. 若检测寄存器值为 1,CRC16 校验寄存器与多项式 0xA001 进行“异或”运算,赋值给 CRC16 校验寄存器;
  7. 重复步骤 4~6,直至移出 8 位;
  8. 取被校验串的下一个字节赋值给临时寄存器;
  9. 重复步骤 3~8,直至被校验串的所有字节均被校验;
  10. 返回 CRC16 校验寄存器的值。

校验码按照先高字节后低字节的顺序存放。

代码

public static string GetHj212Crc16(byte[] bytes)
{
    int crcRegister = 0xFFFF;
    for (int i = 0; i < bytes.Length; i++)
    {
        crcRegister = (crcRegister >> 8) ^ bytes[i];
        for (int j = 0; j < 8; j++)
        {
            int check = crcRegister & 0x0001;
            crcRegister >>= 1;
            if (check == 0x0001)
            {
                crcRegister ^= 0xA001;
            }
        }
    }

    string result = string.Format("{0:X}", crcRegister);//转十六进制
    for (int i = result.Length; i < 4; i++)//补足 4 位
    {
        result = "0" + result;
    }

    return result;
}

代码地址:Hj212Crc16

HJ212 CRC 16 (C#)

标签:har   算法   cto   orm   for   eth   sha   tree   href   

原文地址:https://www.cnblogs.com/victorbu/p/10393148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!