CRC32算法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.IO;
 5
 6 namespace GetCRC32
 7 {
 8     class CRC32Cls
 9     {
10         protected ulong[] Crc32Table;
11         //生成CRC32码表
12         public void GetCRC32Table()
13         {
14             ulong Crc;
15             Crc32Table = new ulong[256];
16             int i,j;
17             for(i = 0;i < 256; i++)
18             {
19                 Crc = (ulong)i;
20                 for (j = 8; j > 0; j--)
21                 {
22                     if ((Crc & 1) == 1)
23                         Crc = (Crc >> 1) ^ 0xEDB88320;
24                     else
25                         Crc >>= 1;
26                 }
27                 Crc32Table[i] = Crc;
28             }
29         }
30
31         //获取字符串的CRC32校验值
32         public ulong GetCRC32Str(string sInputString)
33         {
34             //生成码表
35             GetCRC32Table();
36             byte[] buffer = System.Text.ASCIIEncoding.ASCII.GetBytes(sInputString);
37             ulong value = 0xffffffff;
38             int len = buffer.Length;
39             for (int i = 0; i < len; i++)
40             {
41                 value = (value >> 8) ^ Crc32Table[(value & 0xFF)^ buffer[i]];
42             }
43             return value ^ 0xffffffff;
44         }
45     }
46 }

CRC16算法

 1          public static byte[] CRC16(string sInputString)
 2          {
 3              byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(sInputString);
 4              int len = data.Length;
 5              if (len > 0)
 6              {
 7                  ushort crc = 0xFFFF;
 8
 9                  for (int i = 0; i < len; i++)
10                  {
11                      crc = (ushort)(crc ^ (data[i]));
12                      for (int j = 0; j < 8; j++)
13                      {
14                          crc = (crc & 1) != 0 ? (ushort)((crc >> 1) ^ 0xA001) : (ushort)(crc >> 1);
15                      }
16                  }
17                  byte hi = (byte)((crc & 0xFF00) >> 8);  //高位置
18                  byte lo = (byte)(crc & 0x00FF);         //低位置
19
20                  return new byte[] { hi, lo };
21              }
22              return new byte[] { 0, 0 };
23          }
24
25 // ASCII码转为字符串
26          public static string ByteToString(byte[] arr, bool isReverse)
27          {
28              try
29              {
30                  byte hi = arr[0], lo = arr[1];
31                  return Convert.ToString(isReverse ? hi + lo * 0x100 : hi * 0x100 + lo, 16).ToUpper().PadLeft(4, '0');
32              }
33              catch (Exception ex) { throw (ex); }
34          }

更多内容请访问 www.uusystem.com

转载于:https://www.cnblogs.com/tianjifa/p/9216985.html

CRC32/CRC16算法C#中的实现相关推荐

  1. C语言 crc32校验算法原理,CRC循环冗余校验的实现原理

    之前在做学校项目的时候用到了CRC 原理,但在网上查找的过程中,发现讲解CRC知识的资源很多,但是对新手比较友好的.讲的十分清楚的又很少,很多资料也不完善,读起来心中常常不由自主地奔腾过上千个&quo ...

  2. CRC32校验算法原理及计算说明

    本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列). 参考: 1.CRC32加密算法原理 2.CRC多项式对应代码 一.CRC基本原理(Cycl ...

  3. php实现crc16算法

    crc(循环冗余校验)是一种常用来检验数据完整性和正确性的算法,常用于网络传输校验,压缩算法等等,简单来说,crc把一个待校验字符串当作一个非常大的整数,然后除以一个特定的数,所得的余数就是crc校验 ...

  4. 技术图文:排序技术在求解算法题中的应用

    背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第五篇图文. 理论部分 C# 中的排序 对集合类的排序,我们通常使用位于 System.Core 程序集,System.Lin ...

  5. 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  6. 《算法竞赛中的初等数论》(四)正文 0x40反演(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  7. 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  8. 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  9. 几道 BAT 算法面试中经常问的「字符串」问题

    https://www.toutiao.com/a6675839856192520711/ String 作为最常见的编程语言类型之一,在算法面试中出现的频率极高. 1. 验证回文串 题目来源于 Le ...

  10. 如何在算法交易中使用AI?摩根大通发布新版指南

    https://blog.csdn.net/cf2SudS8x8F0v/article/details/84901318 来源 :efinancialcareers.com 作者 :Sarah But ...

最新文章

  1. 使用深度学习和树搜索进行从零开始的既快又慢的学习
  2. extjs window显示在顶层
  3. 【PAT甲级 素数判断 进制转换】1015 Reversible Primes (20 分) Java版 4/4通过
  4. python的各种推导式(列表推导式、字典推导式、集合推导式)
  5. 转:jquery选择器的使用方法
  6. 《软件需求》学习笔记
  7. Android AIDL
  8. 钢绞线的弹性模量的计算方法_钢绞线弹性模量的理论计算及其影响因素分析
  9. 【第三方服务】微信公众平台授权登录
  10. AutoJs学习-自动添加微信群好友
  11. 「玻璃鸟不会归来」读后感
  12. 直播带货开发,实现主播和用户连麦的方式
  13. 抖音短视频创业,抖音机房怎么样搭建?有哪些技巧
  14. Linux nohup的作用
  15. Swift CoreAnimation ---- CALayer的呈现层和模型层
  16. 晨枫U盘维护工具V2.0版
  17. dB单位理解,声音,天线,功率
  18. 涂鸦智能赴美上市:2年亏损1.4亿美元,腾讯、高瓴等参与认购
  19. 用Python模拟识别图片验证码并发送手机验证码
  20. Oracle一张表写多个触发器,详解oracle中通过触发器记录每个语句影响总行数

热门文章

  1. 【新番尝鲜】玛利亚狂热--百合VS伪娘之战
  2. 学车日记(4)--小路考Pass!
  3. 周黑鸭借力MES,推进智能生产
  4. [GO]删除切片的某个值
  5. linux c 笔记-1
  6. JavaScript的陷阱[转]
  7. Thread 线程基础之-线程池ThreadPool一
  8. java的线程池的基础类
  9. SSL数字证书的签发及使用(服务器证书)
  10. pip常用命令、配置pip源