CRC32/CRC16算法C#中的实现
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#中的实现相关推荐
- C语言 crc32校验算法原理,CRC循环冗余校验的实现原理
之前在做学校项目的时候用到了CRC 原理,但在网上查找的过程中,发现讲解CRC知识的资源很多,但是对新手比较友好的.讲的十分清楚的又很少,很多资料也不完善,读起来心中常常不由自主地奔腾过上千个&quo ...
- CRC32校验算法原理及计算说明
本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列). 参考: 1.CRC32加密算法原理 2.CRC多项式对应代码 一.CRC基本原理(Cycl ...
- php实现crc16算法
crc(循环冗余校验)是一种常用来检验数据完整性和正确性的算法,常用于网络传输校验,压缩算法等等,简单来说,crc把一个待校验字符串当作一个非常大的整数,然后除以一个特定的数,所得的余数就是crc校验 ...
- 技术图文:排序技术在求解算法题中的应用
背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第五篇图文. 理论部分 C# 中的排序 对集合类的排序,我们通常使用位于 System.Core 程序集,System.Lin ...
- 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 《算法竞赛中的初等数论》(四)正文 0x40反演(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 几道 BAT 算法面试中经常问的「字符串」问题
https://www.toutiao.com/a6675839856192520711/ String 作为最常见的编程语言类型之一,在算法面试中出现的频率极高. 1. 验证回文串 题目来源于 Le ...
- 如何在算法交易中使用AI?摩根大通发布新版指南
https://blog.csdn.net/cf2SudS8x8F0v/article/details/84901318 来源 :efinancialcareers.com 作者 :Sarah But ...
最新文章
- 使用深度学习和树搜索进行从零开始的既快又慢的学习
- extjs window显示在顶层
- 【PAT甲级 素数判断 进制转换】1015 Reversible Primes (20 分) Java版 4/4通过
- python的各种推导式(列表推导式、字典推导式、集合推导式)
- 转:jquery选择器的使用方法
- 《软件需求》学习笔记
- Android AIDL
- 钢绞线的弹性模量的计算方法_钢绞线弹性模量的理论计算及其影响因素分析
- 【第三方服务】微信公众平台授权登录
- AutoJs学习-自动添加微信群好友
- 「玻璃鸟不会归来」读后感
- 直播带货开发,实现主播和用户连麦的方式
- 抖音短视频创业,抖音机房怎么样搭建?有哪些技巧
- Linux nohup的作用
- Swift CoreAnimation ---- CALayer的呈现层和模型层
- 晨枫U盘维护工具V2.0版
- dB单位理解,声音,天线,功率
- 涂鸦智能赴美上市:2年亏损1.4亿美元,腾讯、高瓴等参与认购
- 用Python模拟识别图片验证码并发送手机验证码
- Oracle一张表写多个触发器,详解oracle中通过触发器记录每个语句影响总行数