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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM