首页 > 编程语言 >使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法

使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法

时间:2023-08-09 16:46:12浏览次数:33  
标签:代码生成 string crc16 16 hexString modbus byte

前言

在网上也是查看了很多关于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);                

 

标签:代码生成,string,crc16,16,hexString,modbus,byte
From: https://www.cnblogs.com/ting1024/p/17617203.html

相关文章

  • 产业共振 智能涌现!8月16日飞桨携手生态伙伴带来大模型企业应用创新实践
    当前,人工智能已经成为新一轮科技革命和产业变革的重要驱动力量,基于强算法、大算力和大数据的大模型成为人工智能发展的主流方向。AI大模型已经从拼参数发展到拼应用,进入大规模可复制的产业落地阶段。飞桨深度学习平台和文心大模型一直致力于发挥算法模型基础技术优势,助力广大企业将......
  • 16.Mycat进阶
    课程目标1、掌握不同数据分片策略的配置方式与特点2、Mycat扩缩容与数据导入导出3、理解Mycat注解的作用与应用场景4、读写分离的实现和原理5、Mycat核心原理分析总结内容定位适合在了解了Mycat的基本使用之后,想要深入学习Mycat的同学1分片策略详解Mycat权威指......
  • python:安装backgroundremover 0.2.4(Python 3.9.16)
    一,官方代码及文档:https://github.com/nadermx/backgroundremover二,安装backgroundremover的准备工作1,安装pytorch:https://blog.imgtouch.com/index.php/2023/08/03/rocky-linux-an-zhuang-pytorch-pytorch-2-1-python-3-9-16/2, 安装ffmpeg:https://blog.imgtouch.......
  • rocky linux:安装pytorch(pytorch 2.0.1 / Python 3.9.16)
    一,pytorch官网:https://pytorch.org/如图:根据自己的需求选择版本、平台、语言环境等信息,然后运行命令二,运行pip安装命令:[root@imgbin]#pip3installtorchtorchvisiontorchaudio--index-urlhttps://download.pytorch.org/whl/cpuLookinginindexes:https://......
  • P3180 [HAOI2016] 地图
    Problem给出\(n\)个点\(m\)条边的无向连通图,且每条边最多被包含在一个环中,每个点有颜色,有\(q\)次询问,每次询问给出一个点\(x\)和参数\(y\),假如将\(1\)到\(x\)所有简单路径上的边删去后,从\(x\)出发,能到达的所有点中,颜色编号小于等于\(y\)且出现次数为奇数或偶数......
  • LeetCode 16. 3Sum Closest 双指针+排序
    Givenanintegerarraynumsoflengthnandanintegertarget,findthreeintegersinnumssuchthatthesumisclosesttotarget.Returnthesumofthethreeintegers.Youmayassumethateachinputwouldhaveexactlyonesolution.Solution先将原数组排序,然......
  • 苹果M3 Max有两种版本:14+40?还是16+40?
    最近有关苹果M3系列处理器的消息突然多了起来,包括M3、M3Pro、M3Max,都将升级为台积电3nm工艺,但规格上比较保守,至少核心数量不会大幅增加。此前说法称,M3Max将配备14个CPU核心、40个GPU核心,相比于M2Max都增加了2个。根据最新曝料,苹果正在测试两种版本的M3Max,其一就是14+40核心......
  • 学习Java第16天
    Scanner对象之前我们学的基本语法中文名并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入基本语法:Scanners=newScanner(System.in)通过Scanner类的ne......
  • PPT| APS高级计划与排产解决方案 P116
    PPT共116页,由于篇幅有限,以下为部分资料.......
  • JavaScript中16进制颜色与rgb颜色互相转换
    16进制转rgbfunctionhexToRgba(hex,opacity){if(!hex)hex='#ededed';letrgba='rgba('+parseInt('0x'+hex.slice(1,3))+','+parseInt('0x'+hex.slice(3,5))+','+......