Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# crc16

作者:当过家家——变成现实。   发布日期:2025-10-04   浏览:70

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)}");
    }
}

解释说明

  1. 初始化CRC16表:

    • crc16Table 是一个包含256个元素的数组,用于存储预计算的CRC16值。
    • 在静态构造函数中,使用给定的多项式(这里使用的是反转后的多项式0xA001)来填充这个表。
  2. 计算CRC16校验值:

    • ComputeChecksum 方法接收一个字节数组作为输入,并返回一个16位的CRC校验值。
    • 它通过遍历输入字节数组,并利用预计算的CRC16表来高效地计算CRC值。
  3. 将CRC16结果转换为字节数组:

    • ComputeChecksumBytes 方法将计算出的16位CRC值转换为两个字节的数组,方便后续处理或传输。
  4. 主程序:

    • Main 方法演示了如何使用上述方法来计算一个字符串的CRC16校验值,并输出结果。

上一篇:c#注释

下一篇:c# byte转int

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站