zoukankan      html  css  js  c++  java
  • HJ212 CRC 16 (C#)

    算法

    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

  • 相关阅读:
    DotnetCore 单文件发布
    Parallel.ForEach 之 MaxDegreeOfParallelism
    Quartznet速记
    C# SendAysnc 超时
    微耕门禁跨网段搜索代理
    服务守护DOS脚本
    Flutter速记
    ShowDoc速记
    Docker运行dotnetcore
    Redis速记
  • 原文地址:https://www.cnblogs.com/victorbu/p/10393148.html
Copyright © 2011-2022 走看看