C# crc16modbus
using System; public class Crc { /// <summary> /// 判断数据中crc是否正确 /// </summary> /// <param name="datas">传入的数据后两位是crc</param> /// <returns></returns> public static bool IsCrcOK(byte[] datas) { if (datas.Length == 0) { return false; } int length = datas.Length - 2; byte[] bytes = new byte[length]; Array.Copy(datas, 0, bytes, 0, length); byte[] getCrc = GetModbusCrc16(bytes); if (getCrc[0] == datas[length] && getCrc[1] == datas[length + 1]) { 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 + 2]; Array.Copy(datas, crcDatas, length); Array.Copy(crc16, 0, crcDatas, length, 2); 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 = 0; i < bytes.Length; i++) { crcRegister_L = (byte)(crcRegister_L ^ bytes[i]); for (int j = 0; j < 8; j++) { byte tempCRC_H = crcRegister_H; byte tempCRC_L = crcRegister_L; crcRegister_H = (byte)(crcRegister_H >> 1); crcRegister_L = (byte)(crcRegister_L >> 1); // 高位右移前最后 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 }; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界