C# 实现CRC-16-IBM 计算
时间: 2024-12-15 09:15:57 浏览: 3
CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的数据错误检测算法,其中CRC-16-IBM是IBM公司推广的一种16位CRC校验标准。在C#中,你可以使用System.BitConverter和一些位操作来实现CRC-16-IBM计算。下面是一个简单的步骤:
1. 定义两个常量:`crcTable`存储了CRC-16-IBM的查表值,`Poly`是CRC-16-IBM使用的生成多项式(通常为0x8408,二进制表示为10000000010000)。
```csharp
const uint crcTable = 0xEDB88320;
byte[] Poly = new byte[2] { 0x00, 0x84 };
```
2. 创建函数,输入是要校验的数据字节数组和当前的CRC值(初始值通常是0xFFFF)。
```csharp
public static ushort CalculateCRC16IBM(byte[] data, ushort initialCrc)
{
for (int i = 0; i < data.Length; i++)
{
// 将当前数据字节与CRC值异或
initialCrc ^= data[i];
// 对异或结果进行循环左移,并按表查找新的CRC值
initialCrc = (ushort)(initialCrc >> 8) ^ crcTable[(initialCrc & 0xFF) ^ data[i]];
}
return initialCrc;
}
```
3. 调用这个函数并传递需要校验的数据数组以及初始 CRC 值(如所有位都设为1的16位整数,即 0xFFFF)。
```csharp
byte[] inputData = ...; // 你要校验的数据
ushort calculatedCRC = CalculateCRC16IBM(inputData, 0xFFFF);
```
阅读全文