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

c# crc16校验

作者:昔日暖阳   发布日期:2025-05-05   浏览:29

using System;

public class CRC16
{
    private static readonly ushort[] crc16Table = new ushort[256];

    static CRC16()
    {
        // 初始化CRC16表
        for (ushort i = 0; i < 256; i++)
        {
            ushort crc = 0;
            ushort c = i;
            for (int j = 0; j < 8; j++)
            {
                if (((crc ^ c) & 0x0001) != 0)
                {
                    crc = (ushort)((crc >> 1) ^ 0xA001);
                }
                else
                {
                    crc >>= 1;
                }
                c >>= 1;
            }
            crc16Table[i] = crc;
        }
    }

    public static ushort ComputeChecksum(byte[] bytes)
    {
        ushort crc = 0xFFFF;
        foreach (byte b in bytes)
        {
            crc = (ushort)((crc >> 8) ^ crc16Table[(crc ^ b) & 0xFF]);
        }
        return crc;
    }

    public static byte[] ComputeChecksumBytes(byte[] bytes)
    {
        ushort crc = ComputeChecksum(bytes);
        return new byte[] { (byte)(crc & 0xFF), (byte)(crc >> 8) };
    }
}

// 示例用法
class Program
{
    static void Main()
    {
        byte[] data = { 0x01, 0x02, 0x03, 0x04, 0x05 };
        ushort checksum = CRC16.ComputeChecksum(data);
        Console.WriteLine($"CRC16 Checksum: {checksum:X4}");

        byte[] checksumBytes = CRC16.ComputeChecksumBytes(data);
        Console.WriteLine($"CRC16 Checksum Bytes: {BitConverter.ToString(checksumBytes)}");
    }
}

解释说明:

  1. CRC16表初始化:在静态构造函数中,我们初始化了一个CRC16查找表 (crc16Table)。这个表用于加速CRC计算,避免每次计算时都进行复杂的位运算。

  2. ComputeChecksum方法:该方法接收一个字节数组,并返回一个16位的CRC校验值。它使用预先计算好的CRC16表来快速计算校验值。

  3. ComputeChecksumBytes方法:该方法将计算出的16位CRC校验值拆分为两个字节,并返回一个包含这两个字节的数组。

  4. 示例用法:在Main方法中,我们定义了一个字节数组 data,然后调用ComputeChecksumComputeChecksumBytes方法来计算并打印CRC16校验值及其字节表示形式。

上一篇:c#将一个文件夹复制到另一个文件夹

下一篇:c# checkedlistbox

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c# rtsp

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

Laravel 中文站