首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# 快速 crc32 计算:

C# 快速 crc32 计算

================

在 C# 中,可以使用以下方法快速计算 CRC32 校验和。

方法一:使用 BitConverter


使用 BitConverter 类可以快速将字节序列转换为整数,然后使用 CRC32 算法计算校验和。

代码语言:csharp
复制

using System;

using System.Runtime.InteropServices;

class Program

{

代码语言:txt
复制
static void Main(string[] args)
代码语言:txt
复制
{
代码语言:txt
复制
    byte[] data = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
代码语言:txt
复制
    uint crc32 = Crc32.Compute(data);
代码语言:txt
复制
    Console.WriteLine(crc32.ToString("X"));
代码语言:txt
复制
}

}

public class Crc32

{

代码语言:txt
复制
public static uint Compute(byte[] data)
代码语言:txt
复制
{
代码语言:txt
复制
    uint crc = 0xffffffff;
代码语言:txt
复制
    int len = data.Length;
代码语言:txt
复制
    for (int i = 0; i < len; i++)
代码语言:txt
复制
    {
代码语言:txt
复制
        crc = (crc >> 8) ^ Crc32Table[data[i] ^ (crc & 0xff)];
代码语言:txt
复制
    }
代码语言:txt
复制
    return crc;
代码语言:txt
复制
}

}

public static class Crc32Table

{

代码语言:txt
复制
private static readonly uint[] Table = new uint[]
代码语言:txt
复制
{
代码语言:txt
复制
    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
代码语言:txt
复制
    0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
代码语言:txt
复制
    0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
代码语言:txt
复制
    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
代码语言:txt
复制
    0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
代码语言:txt
复制
    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
代码语言:txt
复制
    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
代码语言:txt
复制
    0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于C# 的 WinForm 开发 (一、C# 快速入门)

C#快速入门 一、C# 初体验 & 快速入门 1.1 环境搭建 1.2 注释: 二、C# 基础语法 2.1 数据类型 2.1.1 值类型 2.1.2 引用类型 2.2.1 变量 2.2.2 常量...2.5.4 数据类型转换 2.6 流程控制 2.6.1 顺序结构 2.6.2 条件结构 2.6.3 循环结构 (1) while 循环 (2) for循环 (3) foreach循环 2.7 数组 调试 C#...和 Java 的语法比较类似,但是还是会有一点点不同 一、C# 初体验 & 快速入门 1.1 环境搭建 开发工具: visual studio 2012 创建项目 —> 编写代码 —> 运行 快捷键...:c + w + tab x 2 快速打印输出语句 using System; using System.Collections.Generic; using System.Linq; using System.Text...在 C# 中使用 const 关键字定义常量,常量的值是不能改变的 语法: const 数据类型 常量名 = 值; // ======================== cosnt float pi

1.7K40

计算快速入门指南

本文简单介绍了云计算的概念、架构、部署及市场等多方面的内容: 云计算是什么? 简单来说,云计算就是按需计算服务的交付,服务涵盖:应用程序、存储和处理能力,通常通过互联网并按需付费。 云计算如何工作?...但是,租用计算能力的概念后来又再次出现,在1990年代末和2000年代初,应用服务提供商,公用事业计算和网格计算都体现了租用计算能力的概念。...而且,如果新应用程序变得非常流行,则云的弹性特征意味着应用程序可以更容易、更快速地进行扩展。...公有云是典型的云计算模型,用户可以通过互联网使用大量的计算能力(无论是IaaS、PaaS还是SaaS)。使用公有云的一个重要好处是能够快速扩展服务。...AZ由一个或多个数据中心组成,这些数据中心相距足够远,理论上一次意外故障不会使这两个数据中心都脱机,而对于需要快速转移的应用程序来说,它们之间的距离足够近。

97910

C# 快速释放内存的大数组

本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组。 最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题。...在博客园看到了一位大神使用 Marshal 做出快速申请的大数组,于是我就学他的方法来弄一个。本文告诉大家这个类是如何使用。 在使用的时候,先来看下原来的 C# 的大数组性能。...使用 下面使用一个快速申请 int 数组来告诉大家如何使用。 是否还记得 C 的申请数组?...如果想使用封装好的,请看下面的大神弄好的类 参见:C#+无unsafe的非托管大数组(large unmanaged array in c# without ‘unsafe’ keyword) - BIT...实际上因为很多时候都是使用实例化池,但是实例化池在进入游戏的时候,可以让gc不会让程序暂停,但是会在游戏进入下一关的时候,无法快速清理数据。

1.8K20

C# 快速释放内存的大数组

本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组。 最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题。...在博客园看到了一位大神使用 Marshal 做出快速申请的大数组,于是我就学他的方法来弄一个。本文告诉大家这个类是如何使用。 在使用的时候,先来看下原来的 C# 的大数组性能。...使用 下面使用一个快速申请 int 数组来告诉大家如何使用。 是否还记得 C 的申请数组?...如果想使用封装好的,请看下面的大神弄好的类 参见:C#+无unsafe的非托管大数组(large unmanaged array in c# without ‘unsafe’ keyword) - BIT...实际上因为很多时候都是使用实例化池,但是实例化池在进入游戏的时候,可以让gc不会让程序暂停,但是会在游戏进入下一关的时候,无法快速清理数据。

2.8K20

C#数学计算包 Math.NET

Math.NET的目标是为提供一款自身包含清晰框架的符号运算和数学运算/科学运算,它是C#开发的开源类库。Math.NET含了一个支持线性代数的解析器,分析复杂微分,解方程等等功能。...Math.NET包含下列几个模块: Math.NET Numerics 这个是Math.NET工程的数值计算部分,其目的是针对科学计算领域, 工程和日常应用,提供一些方法和算法。...Math.NET Numerics是针对.NET、Silverlight和Mono的开源数值计算库,是Math.NET项目的一部分。...开源,基于LGPL授权 Math.NET LinqAlegebra LinqAlgebra(以前被称为Palladium)提供了一些基于纯Linq表达式顶层的元素,可以应用于通用的代数计算系统...由软件, 开源,基于GPL授权 Math.NET Classic 一 个经典的利用树来表达的代数计算系统工具(和Maple,Mathematica相似,当然没他们那么给力)。

3K50

C# 加减乘除计算

我在动手做这个计算器之前和大多数人都有着一样的观点:不就是一个计算器吗?这能有多难啊?(眼高手低 十分不屑.jpg)然而等到自己真正动手做起来的时候就会发现其实做一个计算器并没有想象中的那么简单。...,计算器并不能够在上一次计算结果的基础上进行计算计算器会直接奔溃;③当用户输入完一串数字和一个运算符后文本框会变为空,此时用户不输入下一串数字而是继续输入运算符,计算器就会直接奔溃。...1.2版 出现了俩行输入文本框,第一行显示计算式子,第二行显示计算结果。...解决了1.1版的俩个问题:①在一次计算完成后,重新输入一串数字能够开始一次新的运算;②在上一次计算结束后直接输入运算符和一串数字,第二行结果会变到第一行并且完成计算。...C#代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;

1.2K10
领券