使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法
前言
在网上也是查看了很多关于crc16校验的文章,但是好像都是对于有基础的人看的,我当时拿起直接使用,发现行不通,这对于零基础的不是很友好,所以决定贡献一篇,哈哈哈哈~~~
public uint CalcCRC16(string hexCommand) { byte[] pBuf = HexStringToByteArray(hexCommand); uint i, j; uint crc16 = 0xFFFF; for (i = 0;i< pBuf.Length; i++) { crc16 ^= pBuf[i]; for (j = 0;j<8; j++) { if ((crc16 & 0x0001) != 0) { crc16 >>= 1; // 右移一位 crc16 ^= 0xA001; // 异或多项式0xA001 } else { crc16 >>= 1; // 右移一位 } } } return crc16; } private byte[] HexStringToByteArray(string hexString) { hexString = hexString.Replace(" ", "").Replace("-", "").ToUpper().Trim(); if (hexString.Length % 2 != 0) { hexString += " "; } int bytesCount = hexString.Length / 2; byte[] bytes = new byte[bytesCount]; for (int i = 0; i < bytesCount; i++) { string byteString = hexString.Substring(i * 2, 2); bytes[i] = Convert.ToByte(byteString, 16); } return bytes; }
下面就是使用环节:
string defSend = "0125546ACDF126"; //modbus是我将CalcCRC16这个方法封装在modbus这个对象的类中 uint crcDef = modbus.CalcCRC16(defSend); //Low表示低位字节 High表示高位字节 //crcDefLow 和crcDefHigh 算出来的就是校验码 string crcDefLow = Convert.ToString((byte)(crcDef & 0xFF), 16); string crcDefHigh = Convert.ToString((byte)(crcDef >> 8), 16);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)