在 C# 中计算 CRC16-CCITT 校验和可以通过实现 CRC 算法来完成。CRC16-CCITT 是一种常见的循环冗余校验算法,广泛用于数据校验和错误检测。以下是一个示例代码,展示了如何在 C# 中计算 CRC16-CCITT 校验和。
CRC16-CCITT 的多项式通常为 0x1021
,初始值为 0xFFFF
。以下是一个实现 CRC16-CCITT 的 C# 示例代码:
using System;
public class CRC16CCITT
{
private const ushort polynomial = 0x1021;
private ushort[] table = new ushort[256];
private ushort initialValue = 0xFFFF;
public CRC16CCITT()
{
GenerateTable();
}
private void GenerateTable()
{
for (ushort i = 0; i < table.Length; ++i)
{
ushort value = 0;
ushort temp = (ushort)(i << 8);
for (byte j = 0; j < 8; ++j)
{
if (((value ^ temp) & 0x8000) != 0)
{
value = (ushort)((value << 1) ^ polynomial);
}
else
{
value <<= 1;
}
temp <<= 1;
}
table[i] = value;
}
}
public ushort ComputeChecksum(byte[] bytes)
{
ushort crc = initialValue;
foreach (byte b in bytes)
{
byte index = (byte)((crc >> 8) ^ b);
crc = (ushort)((crc << 8) ^ table[index]);
}
return crc;
}
public byte[] ComputeChecksumBytes(byte[] bytes)
{
ushort crc = ComputeChecksum(bytes);
return BitConverter.GetBytes(crc);
}
}
class Program
{
static void Main()
{
CRC16CCITT crc16 = new CRC16CCITT();
byte[] data = System.Text.Encoding.ASCII.GetBytes("123456789");
ushort checksum = crc16.ComputeChecksum(data);
Console.WriteLine("CRC16-CCITT Checksum: 0x" + checksum.ToString("X4"));
}
}
polynomial
:CRC16-CCITT 的多项式 0x1021
。table
:用于存储预计算的 CRC 表。initialValue
:CRC 计算的初始值 0xFFFF
。CRC16CCITT
实例。在 Main
方法中,我们计算字符串 "123456789" 的 CRC16-CCITT 校验和,并输出结果。你可以根据需要修改输入数据来计算其他数据的 CRC 校验和。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云