c# CRC16位校验辅助类
- public class CRC16Helper
- {
- /// <summary>
- /// CRC校验
- /// </summary>
- /// <param name="data">校验数据</param>
- /// <returns>高低8位</returns>
- public static string CRCCalc(string data)
- {
- string[] datas = data.Split(' ');
- List<byte> bytedata = new List<byte>();
- foreach (string str in datas)
- {
- bytedata.Add(byte.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier));
- }
- byte[] crcbuf = bytedata.ToArray();
- //计算并填写CRC校验码
- int crc = 0xffff;
- int len = crcbuf.Length;
- for (int n = ; n < len; n++)
- {
- byte i;
- crc = crc ^ crcbuf[n];
- for (i = ; i < ; i++)
- {
- int TT;
- TT = crc & ;
- crc = crc >> ;
- crc = crc & 0x7fff;
- if (TT == )
- {
- crc = crc ^ 0xa001;
- }
- crc = crc & 0xffff;
- }
- }
- string[] redata = new string[];
- redata[] = Convert.ToString((byte)((crc >> ) & 0xff), );
- redata[] = Convert.ToString((byte)((crc & 0xff)), );
- return data + " " + redata[] + " " + redata[];
- }
- /// <summary>
- /// CRC校验
- /// </summary>
- /// <param name="bytes"></param>
- /// <returns></returns>
- public static byte[] CRC16(byte[] bytes)
- {
- //计算并填写CRC校验码
- int crc = 0xffff;
- int len = bytes.Length;
- for (int n = ; n < len; n++)
- {
- byte i;
- crc = crc ^ bytes[n];
- for (i = ; i < ; i++)
- {
- int TT;
- TT = crc & ;
- crc = crc >> ;
- crc = crc & 0x7fff;
- if (TT == )
- {
- crc = crc ^ 0xa001;
- }
- crc = crc & 0xffff;
- }
- }
- var nl = bytes.Length + ;
- //生成的两位校验码
- byte[] redata = new byte[];
- redata[] = (byte)((crc & 0xff));
- redata[] = (byte)((crc >> ) & 0xff);
- //重新组织字节数组
- var newByte = new byte[nl];
- for (int i = ; i < bytes.Length; i++)
- {
- newByte[i] = bytes[i];
- }
- newByte[nl - ] = (byte)redata[];
- newByte[nl -] = redata[];
- return newByte;
- }
- }
第一个方法是把校验位返回,返回的是字符串
第二个是在第一个的基础上改的,返回的是加了校验位之后的数据,字节数组。
说明:代码来自好互联网。
c# CRC16位校验辅助类的更多相关文章
- CRC16位校验
之前有跟第三方通讯合作,应为CRC表码问题导致校验出结果不一致,纠结了很久,最后直接采用CRC计算方式校验才解决. 两种方式贴,自行对比. CRC校验计算方法 private ushort CRC_1 ...
- 如何使用Delphi编写Modbus RTU CRC16的校验码
在工业控制中,Modbus RTU CRC16的校验码用的比较广泛,包括本人富士产品中,PC与伺服电机以及PC与VP系列的变频器的Modbus RTU通讯中都使用到了CRC16. 而对CRC1 ...
- C语言实现的CRC16/CCITT-FALSE校验码函数
要求:输入字符串“00 AA FF CC AA 01 00” 得到校验码“79B1” 方法1: // ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #inclu ...
- Java CRC16 MODBUS校验算法实现
/** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...
- 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
// test4.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束.// #include "pch.h"#include <ios ...
- 最详细易懂的CRC-16校验原理(附源程序)(转)
最详细易懂的CRC-16校验原理(附源程序) from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html 最详细易懂的CR ...
- 最详细易懂的CRC-16校验原理(附源程序)
from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html 最详细易懂的CRC-16校验原理(附源程序) 1.循环校验码( ...
- java 实现从15位~18位的身份证号码转换,校验中国大陆公民身份证、香港居民身份证、澳门身份证和台湾身份证。
package xidian.sl.netcredit.util; /** * Copyright (C) 2009-2010 Yichuan, Fuchun All rights reserved. ...
- C# 实现CRC16校验
前言 本文将使用一个NuGet公开的组件技术来实现CRC16校验功能,提供了一些简单的API,来方便的实现. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控 ...
随机推荐
- IDEA的常用配置(Maven)一键导入及优化内存
IDEA的常用配置一键导入 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如图的压缩包 下载完成后解压缩,点击settings_bak,你会看 ...
- asp.net 创建虚拟目录 iis创建虚拟目录
这几天本人接了个档案管理查询系统的小项目,踩过的坑. 其实功能都挺简单的,大致要求客户有很多pdf文档,为了方便管理,所有要开发一个相当于文件管理系统,本人正好有现成的文件管理系统,修改下就可以.其中 ...
- background 设置文本框背景图
background 属性的作用是给元素设置背景,它是一个复合属性,常用的子属性如下: background-color 指定元素的背景颜色. background-image 指定元素的背景图像. ...
- Retrofit的优点
Retrofit的优点 可以配置不同HTTP client来实现网络请求,如okhttp.httpclient等 将接口的定义与使用分离开来,实现结构. 支持多种返回数据解析的Converter可以快 ...
- Python requests库的使用(一)
requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.python-requests.org/z ...
- Linux 配置程序包源 Nuget
编辑文件NuGet.Config vi ~/.nuget/NuGet/NuGet.Config 新增源 <add key="fz" value="http://19 ...
- 【MongoDB详细使用教程】三、高级查询
目录 1.使用比较运算符查询 2.使用关键字查询 2.1.in/not in 关键字 2.2.size 关键字 2.3.exists 关键字 2.4.or 关键字 3.模糊查询 4.查询结果排序 5. ...
- Linux 信号量之Posix有名字的信号量
信号量(semaphore),也和互斥锁一样提供了线程间或者进程间的同步功能. 信号量有三种: Posix有名字的信号量 Posix基于内存的信号量 System V信号量 信号量比互斥锁高级,互斥锁 ...
- kerberos&LDAP实现免密码登录搭建
kerberos && openldap 1.install openldap & kerberos server: yum install db4 db4-utils db4 ...
- (导航页)OpenStack-M版-双节点手工搭建-附B站视频
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 本次搭建采用双节点,离线源搭建, 配置如下 本次搭建采用2台4核4G的虚拟机,也可以改为2核4G ...