栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C# 实现CRC校验(循环冗余校验)CRC-8位/16位/32位等参数模型

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 实现CRC校验(循环冗余校验)CRC-8位/16位/32位等参数模型

C# 实现CRC校验(循环冗余校验)CRC-8位/16位/32位等参数模型

目录
  • C# 实现CRC校验(循环冗余校验)CRC-8位/16位/32位等参数模型
    • 什么是CRC
      • CRC算法参数模型
    • 完整代码
      • 引用库
      • Demo
      • 使用其他CRC参数模型
    • 常见的CRC参数模型
    • 参考资料

什么是CRC

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

CRC算法参数模型
参数名解释
WIDTH宽度,即CRC比特数。
POLY生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
INIT这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。
REFIN待测数据的每个字节是否按位反转,True或False。
REFOUT在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
XOROUT计算结果与此参数异或后得到最终的CRC值。

完整代码 引用库

右键单击项目,选择“管理NuGet程序包”。

搜索“ApeFree.CodePlus.Algorithm”并安装。

Demo

Demo中使用库中提供的四个常见的CRC参数模型和一个自定义的参数模型演示使用方法。

using ApeFree.CodePlus.Algorithm.CRC;

static class Program
{
	public static void Main()
	{
		// 测试数据
		var data = new byte[] {0x12, 0x34, 0x56, 0x78, 0x90 };

		// CRC-8
		{
			var crc = new Crc(CrcModel.CRC8);
			var result = crc.Calculate(data);
			Console.WriteLine(BitConverter.ToString(result));
		}

		// CRC-16/IBM
		{
			var crc = new Crc(CrcModel.CRC16_IBM);
			var result = crc.Calculate(data);
			Console.WriteLine(BitConverter.ToString(result));
		}

		// CRC-16/CCITT
		{
			var crc = new Crc(CrcModel.CRC16_CCITT);
			var result = crc.Calculate(data);
			Console.WriteLine(BitConverter.ToString(result));
		}

		// CRC-32
		{
			var crc = new Crc(CrcModel.CRC32);
			var result = crc.Calculate(data);
			Console.WriteLine(BitConverter.ToString(result));
		}

		// 自定义CRC参数模型
		{
			// CRC-16/MODBUS 参数模型
			// 宽度			16
			// 多项式		0x8005
			// 初始值		0xFFFF
			// 结果异或值		0x0000
			// 输入反转		true
			// 输出反转		true
			var cmCRC16Modbus = new CrcModel(16, 0x8005, 0xFFFF, 0x0000, true, true);

			var crc = new Crc(cmCRC16Modbus); 
			var result = crc.Calculate(data);
			Console.WriteLine(BitConverter.ToString(result));
		}
	}
}
使用其他CRC参数模型

库中预设了常见的CRC参数模型(宽度为8-64之间),通过CrcModel可查看。


常见的CRC参数模型

常见的CRC参数模型:


参考资料
  1. CRC(循环冗余校验)在线计算
  2. On-line CRC calculation and free library
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号