using System;
public class CRC16
{
private static ushort[] crc16Table = new ushort[256];
// 初始化CRC16表
static CRC16()
{
ushort polynomial = 0xA001; // 反转后的多项式,标准CRC-16的多项式是0x8005
for (int i = 0; i < 256; i++)
{
ushort crc = (ushort)i;
for (int j = 0; j < 8; j++)
{
if ((crc & 0x0001) != 0)
{
crc = (ushort)((crc >> 1) ^ polynomial);
}
else
{
crc >>= 1;
}
}
crc16Table[i] = crc;
}
}
// 计算CRC16校验值
public static ushort ComputeChecksum(byte[] bytes)
{
ushort crc = 0;
foreach (byte b in bytes)
{
crc = (ushort)((crc >> 8) ^ crc16Table[(crc ^ b) & 0xFF]);
}
return crc;
}
// 将CRC16结果转换为字节数组
public static byte[] ComputeChecksumBytes(byte[] bytes)
{
ushort crc = ComputeChecksum(bytes);
return new byte[] { (byte)(crc & 0xFF), (byte)(crc >> 8) };
}
}
class Program
{
static void Main()
{
string input = "123456789";
byte[] data = System.Text.Encoding.ASCII.GetBytes(input);
ushort crc = CRC16.ComputeChecksum(data);
Console.WriteLine($"CRC16 Checksum: {crc:X4}");
byte[] crcBytes = CRC16.ComputeChecksumBytes(data);
Console.WriteLine($"CRC16 Checksum Bytes: {BitConverter.ToString(crcBytes)}");
}
}
初始化CRC16表:
crc16Table
是一个包含256个元素的数组,用于存储预计算的CRC16值。计算CRC16校验值:
ComputeChecksum
方法接收一个字节数组作为输入,并返回一个16位的CRC校验值。将CRC16结果转换为字节数组:
ComputeChecksumBytes
方法将计算出的16位CRC值转换为两个字节的数组,方便后续处理或传输。主程序:
Main
方法演示了如何使用上述方法来计算一个字符串的CRC16校验值,并输出结果。上一篇:c#注释
下一篇:c# byte转int
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站