C# CRC16 modbus
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace WaterBubbleCheck
{
public class Crc
{ /// <summary>
/// 判断数据中crc是否正确
/// </summary>
/// <param name="datas">传入的数据后两位是crc</param>
/// <returns></returns>
public static bool IsCrcOK(byte[] datas)
{
int length = datas.Length-; byte[] bytes = new byte[length];
Array.Copy(datas, , bytes, , length);
byte[] getCrc = GetModbusCrc16(bytes); if(getCrc[]== datas[length]&&getCrc[]==datas[length+])
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 传入数据添加两位crc
/// </summary>
/// <param name="datas"></param>
/// <returns></returns>
public static byte[] GetCRCDatas(byte[] datas)
{
int length = datas.Length;
byte[] crc16 = GetModbusCrc16(datas);
byte[] crcDatas = new byte[length + ];
Array.Copy(datas, crcDatas, length);
Array.Copy(crc16, , crcDatas, length,);
return crcDatas;
}
private static byte[] GetModbusCrc16(byte[] bytes)
{
byte crcRegister_H = 0xFF, crcRegister_L = 0xFF;// 预置一个值为 0xFFFF 的 16 位寄存器 byte polynomialCode_H = 0xA0, polynomialCode_L = 0x01;// 多项式码 0xA001 for (int i = ; i < bytes.Length; i++)
{
crcRegister_L = (byte)(crcRegister_L ^ bytes[i]); for (int j = ; j < ; j++)
{
byte tempCRC_H = crcRegister_H;
byte tempCRC_L = crcRegister_L; crcRegister_H = (byte)(crcRegister_H >> );
crcRegister_L = (byte)(crcRegister_L >> );
// 高位右移前最后 1 位应该是低位右移后的第 1 位:如果高位最后一位为 1 则低位右移后前面补 1
if ((tempCRC_H & 0x01) == 0x01)
{
crcRegister_L = (byte)(crcRegister_L | 0x80);
} if ((tempCRC_L & 0x01) == 0x01)
{
crcRegister_H = (byte)(crcRegister_H ^ polynomialCode_H);
crcRegister_L = (byte)(crcRegister_L ^ polynomialCode_L);
}
}
} return new byte[] { crcRegister_L, crcRegister_H };
} }
}
C# CRC16 modbus的更多相关文章
- C#CRC16 Modbus 效验算法
CRC校验(循环冗余校验)小知识 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗 ...
- C++与JAVA代码实现CRC-16/MODBUS算法,且与 http://www.ip33.com/crc.html 进行结果验证
CRC-16/MODBUS的多项式为:x16+x15+x2+1(8005),宽度为16.运算时,首先将一个16位的寄存器预置为11111111 11111111,然后连续把数据帧中的每个字节中的8位与 ...
- Java CRC16 MODBUS校验算法实现
/** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...
- C#和C实现通过CRC-16 (Modbus)获取CRC值并校验数据(代码)
文章首发于浩瀚先森博客 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差 ...
- CRC-16 (Modbus)
typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #defi ...
- JAVA编程心得-JAVA实现CRC-CCITT(XMODEM)算法
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 1 byte checksum CRC ...
- CRC分段校验
crc16 modbus分段校验码: const uint8_t ModbusCRCHighTab[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x ...
- CRC全套~~~ 转载
经测试CRC16-CCITT是可以了,其它暂时没有测试哦. 00 0E 00 01 00 01 20 17 12 26 20 19 16 01 00 00 01 01 00 00 00 00 00 0 ...
- 用C#实现的几种常用数据校验方法整理(CRC校验;LRC校验;BCC校验;累加和校验)
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错 ...
随机推荐
- 技术学到多厉害,才能顺利进入BAT?
简介 本科的时候对 Linux 特别感兴趣,心中向往成为一名运维工程师,就开始没日没夜的看相关的书籍,到了大约2013年前后的时候发现 DevOps 开始流行起来了,就开始学习 Python 希望成为 ...
- 自己写的一个用于往文件中插入字符串及空格的bat
@echo off echo pleas input the filename:set /p file= :while rem set j=0 非得写这儿 写下面:check 上面不行 希望大神指点s ...
- django-session的使用---数据库,缓存型
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session Django默认支持Se ...
- C# ado.net 操作(一)
简单的增删改查 class Program { private static string constr = "server=.;database=northwnd;integrated s ...
- String替换占位符
/** * 依次替换占位符 * 例如: 姓名:{s},电话:{s},邮箱:{s} --> 姓名:小张,电话:18800000001,邮箱:abc@123.com * pattern = &quo ...
- 【leetcode】1288. Remove Covered Intervals
题目如下: Given a list of intervals, remove all intervals that are covered by another interval in the li ...
- 查看PublicKeyToken和生成PublicKeyToken
http://hi.baidu.com/honfei/item/7777500b20d8ff8a02ce1bd2
- BZOJ 3931: [CQOI2015]网络吞吐量 Dijkstra+最大流
这个没啥难的. 只保留可以转移最短路的边,然后拆点跑一个最大流即可. #include <bits/stdc++.h> #define N 1004 #define M 250004 #d ...
- 快速掌握Python的捷径-Python基础前传(1)
文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事. 方丈高楼平地起,无论 ...
- 2017 ZSTU寒假排位赛 #5
题目链接:https://vjudge.net/contest/148901#overview. A题,排序以后xjbg即可. B题,弄个数组记录当前列是不是删除以及当前行是不是已经大于下一行然后乱搞 ...