C# CRC16数据校验支持ModelBus和XMODEM校验模式

最近在研究C# CRC数据校验规则,之前用过ModelBus模式,但是这次的现场用到的是XMODEM模式,写一篇文章记录实现细节,方便后期快速开发!

using System;
using System.Collections.Generic;namespace Common
{/// <summary>/// CRC16 帮助类/// </summary>public class CRC16Helper{/// <summary>/// CRC ModelBus校验/// </summary>/// <param name="data">校验数据</param>/// <returns>高低8位</returns>public static string CRCModelBus(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 = 0; n < len; n++){byte i;crc = crc ^ crcbuf[n];for (i = 0; i < 8; i++){int TT;TT = crc & 1;crc = crc >> 1;crc = crc & 0x7fff;if (TT == 1){crc = crc ^ 0xa001;}crc = crc & 0xffff;}}string[] redata = new string[2];redata[1] = Convert.ToString((byte)((crc >> 8) & 0xff), 16);redata[0] = Convert.ToString((byte)((crc & 0xff)), 16);return data + " " + redata[0] + " " + redata[1];}/// <summary>///CRC ModelBus校验/// </summary>/// <param name="bytes"></param>/// <returns></returns>public static byte[] CRCModelBus(byte[] bytes){//计算并填写CRC校验码int crc = 0xffff;int len = bytes.Length;for (int n = 0; n < len; n++){byte i;crc = crc ^ bytes[n];for (i = 0; i < 8; i++){int TT;TT = crc & 1;crc = crc >> 1;crc = crc & 0x7fff;if (TT == 1){crc = crc ^ 0xa001;}crc = crc & 0xffff;}}var nl = bytes.Length + 2;//生成的两位校验码byte[] redata = new byte[2];redata[0] = (byte)((crc & 0xff));redata[1] = (byte)((crc >> 8) & 0xff);//重新组织字节数组var newByte = new byte[nl];for (int i = 0; i < bytes.Length; i++){newByte[i] = bytes[i];}newByte[nl - 2] = (byte)redata[0];newByte[nl - 1] = redata[1];return newByte;}/// <summary>/// CRC  XMODEM校验模式/// </summary>/// <param name="data">数据</param>/// <param name="size">参与校验的数据长度</param>/// <returns></returns>public static UInt16 CRCXMODEM(byte[] data, int size){UInt32 i = 0;UInt16 crc = 0;for (i = 0; i < size; i++){crc = UpdateCRC16(crc, data[i]);}crc = UpdateCRC16(crc, 0);crc = UpdateCRC16(crc, 0);return (UInt16)(crc);}/// <summary>/// 更新RCR16校验/// </summary>/// <param name="crcIn"></param>/// <param name="bytee"></param>/// <returns></returns>private static UInt16 UpdateCRC16(UInt16 crcIn, byte bytee){UInt32 crc = crcIn;UInt32 ins = (UInt32)bytee | 0x100;do{crc <<= 1;ins <<= 1;if ((ins & 0x100) == 0x100){++crc;}if ((crc & 0x10000) == 0x10000){crc ^= 0x1021;}}while (!((ins & 0x10000) == 0x10000));return (UInt16)crc;}}
}

C# CRC16数据校验支持ModelBus和XMODEM校验模式相关推荐

  1. CRC-16/X25、CRC-16/CCITT_FALSE、CRC-16/XMODEM校验码

    这几天做北斗定位设备的协议解析,需要进行CRC-16的校验,设备使用的参数模型是CRC-16/X25,本人使用的是Java语言,网上没找到关于CRC-16/X25 的Java版本,都是C语言的多.转换 ...

  2. 将一个字符串计算出CRC16/XMODEM校验码(4位)

    将一个字符串计算出CRC16/XMODEM校验码(4位) unsigned short CRC16_XMODEM(unsigned char *puchMsg, unsigned int usData ...

  3. Java生成CRC16数据校验码

    CRC即循环冗余校验码(Cyclic Redundancy Check[1]  ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数 ...

  4. 2021年大数据研究中心支持项目交流会成功举行

    12月28日上午,清华大学大数据研究中心支持项目交流会在清华大学东主楼举行.本次交流会共有来自校内六个院系在做的七个项目进行集中交流汇报,包括医工结合类四个项目: ▪ 电子系王贵锦.清华长庚医院张萍 ...

  5. 神策数据全面支持苹果 ASA,全域归因方案再升级

    继推出基于数据流的广告投放分析模式后,神策数据广告投放分析再添新能力--全面支持苹果 ASA 渠道,一站拉通 ASA 投放归因数据和后链路用户行为数据,帮助广告主打造多层次多渠道融合归因方案,轻松还原 ...

  6. 一个新的豆瓣API替代接口,可获取豆瓣、IMDB、烂番茄的电影/电视剧双语(中英)数据,支持IMDB和douban TOP250接口

    说明 本人有个项目需要使用豆瓣API接口获取一些影视数据,近段时间由于豆瓣API经常出问题,项目有点受影响,所以就下定决心,自己开发个类似接口,就结合Wikidata和爬虫,模仿豆瓣制作了一个新的AP ...

  7. CBoard BI 数据可视化 支持国产开源

    摘自: https://github.com/yzhang921/CBoard/wiki/%E5%89%8D%E8%A8%80#%E9%A1%B9%E7%9B%AE%E8%83%8C%E6%99%AF ...

  8. C# OPC DA 协议同步及异步读取数据,支持局域网访问其 他OPC server

    C# OPC DA 协议同步及异步读取数据,支持局域网访问其 他OPC server

  9. 数据采集模块方案 采集网口TCP主动上传模式,支持域名解析和指定IP模式上传

    工业数据采集模块方案 采集网口TCP主动上传模式,支持域名解析和指定IP模式上传,模块本身可以设定IP地址和ID编号,也可以使用dhcp自动获取模式. 模块集成2路4-20ma模拟量采集,4路0-10 ...

最新文章

  1. git钩子放服务器_linux服务器布置git 并带钩子
  2. 5 网络层----IP协议相关技术
  3. CSP认证201609-1 最大波动[C++题解]:遍历
  4. MVC View显示详解(RenderBody,RenderPage,RenderSection,Partial)
  5. caffe生成voc格式lmdb
  6. null === undefined_【英】两个“非值”:undefined 和 null
  7. 解决Vue项目报错:Expected indentation of 2 spaces but found 4. eslint(indent) [8, 1]的方法
  8. android开发转盘按钮,Android中的转盘
  9. EMI电磁干扰的来源和分类
  10. Cloudera Manager 配置
  11. amCharts使用方式
  12. 如何让安卓手机访问内网服务器?
  13. 11_04_第六阶段:大前端进阶||07-Vue详解||P6:Vue绑定事件【观看狂神随笔】
  14. HTML5 AJAX跨域请求
  15. 某计算机采用lcd显示器 玩大型游戏,[1]. 液晶显示器(LCD)作为计算机的一种图文输出设备,已逐渐普及,下列关于液晶显示器的叙述中错误的是_______。...
  16. 额外学习:python字符串的各种方法
  17. Python爬虫:逆向分析某云音乐加密参数
  18. 【Proteus仿真】51单片机汇编数显大型交通灯控制
  19. 无人驾驶、自动驾驶MDC、车联网技术报告
  20. PyQt5界面编程改变字体大小

热门文章

  1. IntelliJ IDEA下载安装
  2. 动态路由下刷新 页面空白
  3. unity加载AB包报错:Unable to read header from archive file
  4. Wireshark抓包分析TCP连接、发送数据与断开过程
  5. 2021考研复试面试题目有哪些类型?
  6. mysql可重复读有什么好处_mysql可重复读现象及原理分析
  7. 从pdf和字体内部格式简单分析pdf复制提取文字乱码的原理
  8. 全网最详细SoilGrid数据的下载与提取(含四种方法)
  9. adodb执行查询oracle慢,adodb.stream逐行读写过慢,求优化VBA
  10. Visual Studio Code 运行命令行,无法加载文件 C:\**.ps1,因为在此系统上禁止运行脚本的解决方法