CRC算法 +c#

原创 2007年09月21日 11:05:00

/// <summary>
  /// CRC 效验
  /// 快速检测算法
  /// </summary>
  public class CRC32{

    protected uint[] crc32Table;

    /// <summary>
    /// 构造:初始化效验表
    /// </summary>
    public CRC32() {
      const uint ulPolynomial = 0xEDB88320;
      uint dwCrc;
      crc32Table = new uint[256];
      int i,j;
      for(i = 0; i < 256; i++) {
        dwCrc = (uint)i;
        for(j = 8; j > 0; j--) {
          if((dwCrc & 1)==1)
            dwCrc = (dwCrc >> 1) ^ ulPolynomial;
          else
            dwCrc >>= 1;
        }
        crc32Table[i] = dwCrc;
      }
    }

    /// <summary>
    /// 字节数组效验
    /// </summary>
    /// <param name="buffer">ref 字节数组</param>
    /// <returns></returns>
    public uint ByteCRC(ref byte[] buffer) {
      uint ulCRC = 0xffffffff;
      uint len;
      len = (uint)buffer.Length;
      for (uint buffptr=0; buffptr < len; buffptr++) {
             uint tabPtr = ulCRC & 0xFF;
        tabPtr = tabPtr ^ buffer[buffptr];
        ulCRC = ulCRC >> 8;
        ulCRC = ulCRC ^ crc32Table[tabPtr];
      }
      return (ulCRC ^ 0xffffffff);
    }


    /// <summary>
    /// 字符串效验
    /// </summary>
    /// <param name="sInputString">字符串</param>
    /// <returns></returns>
    public uint StringCRC(string sInputString){
      byte[] buffer = Encoding.Default.GetBytes(sInputString);
      return ByteCRC(ref buffer);
    }

    /// <summary>
    /// 文件效验
    /// </summary>
    /// <param name="sInputFilename">输入文件</param>
    /// <returns></returns>
    public uint FileCRC(string sInputFilename){
      FileStream inFile = new System.IO.FileStream(sInputFilename, System.IO.FileMode.Open,  System.IO.FileAccess.Read);
      byte[] bInput = new byte[inFile.Length];
      inFile.Read(bInput,0,bInput.Length);
      inFile.Close();

      return ByteCRC(ref bInput);
    }

  } 

完整的16位CRC循环校验算法类(c#语言)

 /// /// CRCTAB 表        ///         private static ushort[] crctab = new ushort[256]{              ...
  • deepwishly
  • deepwishly
  • 2010年04月23日 13:46
  • 6183

CRC校验算法及C#程序实现

CRC校验可以运用于传输数据过程中的验证,发送端发送有效数据时,先根据有效数据和生成多项式(比如CCITT标准的多项式是X16+X12+X5+1)计算出CRC校验码,把CRC校验码加到有效数据后面一起...
  • yangtang_newton
  • yangtang_newton
  • 2009年07月01日 09:31
  • 10352

CRC算法C#实现

原文地址:接口实现:http://www.cnblogs.com/canny/archive/2004/12/27/82466.aspxCRC8:http://www.cnblogs.com/cann...
  • slawdan
  • slawdan
  • 2007年04月25日 11:02
  • 5414

CRC 最全算法库

该算法库支持如下编码    CRC16    CRC16 Modbus    CRC16 SICK      CRC-CCITT (starting value 0x0000)    CR...
  • dog0138
  • dog0138
  • 2012年05月17日 13:07
  • 4282

CRC实现之CRC通用算法(一)

看了两天的CRC,网上的资料大致可分两类,要么数学公式一大堆,最终只告诉你用先移相应位,再用短除法求余数就是对应的CRC码;要么全是代码,并且只针对一种CRC生成多项式。这两种都很难看懂哦,看的我头都...
  • dishening7
  • dishening7
  • 2006年11月18日 18:34
  • 1771

C# 实现CRC校验代码

namespace CRC {     public partial class Form1 : Form     {         public Form1()         {  ...
  • Code_L
  • Code_L
  • 2012年04月13日 11:42
  • 1227

解读一段循环冗余校验(CRC)算法程序

今天遇到一段这样的程序,一时半会很难读懂。
  • u011602557
  • u011602557
  • 2017年05月08日 23:39
  • 483

C#实现的CRC32算法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ALG...
  • wangyong0921
  • wangyong0921
  • 2016年10月09日 14:25
  • 3556

[转载]数据通信中的CRC校验是个非常简单的算法嘛!

原文地址:数据通信中的CRC校验是个非常简单的算法嘛!作者:收藏痕迹 这两天在技术论坛逛,看到有个网友问CRC校验的问题,称看不懂CRC的描述。其实这是计算机科学比较荒唐的一个例证,把非常简单的加...
  • qq_21794823
  • qq_21794823
  • 2017年02月21日 11:27
  • 819

CRC16 校验算法

1、循环校验码(CRC码): 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理: 任意一个由二进制位串组成的代码都可以和一个系数...
  • chen249191508
  • chen249191508
  • 2016年10月31日 11:26
  • 3058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CRC算法 +c#
举报原因:
原因补充:

(最多只允许输入30个字)