Modbus rtu CRC码计算方式

本文介绍了一个使用C#实现的CRC16_MODBUS校验码生成算法,该算法从十六进制字符串中读取数据,将其转换为字节数组,并通过特定的CRC16_MODBUS算法计算校验码。最终,校验码以十六进制形式返回,适用于数据通信和校验场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private void button1_Click(object sender, EventArgs e)
        {
            string hex = textBox1.Text.Trim();
            if (hex.Length > 1)
            {
                byte [] inputByteArray = new byte[hex.Length / 2];
                for (var x = 0; x < inputByteArray.Length; x++)
                {

                    string s = hex.Substring(x * 2, 2);
                    uint s4 = Convert.ToUInt32(s, 16);
                    inputByteArray[x] = Convert.ToByte((int)s4);
                }
                string x1=crc16_modbus(inputByteArray, inputByteArray.Length);
                textBox2.Text = x1.ToString();
            }
        }
        public string crc16_modbus(byte[] modbusdata, int Length)
        {
            uint i, j;
            uint crc16 = 0xFFFF;
            for (i = 0; i < Length; i++)
            {
                crc16 ^= modbusdata[i];  //CRC=BYTE xor CRC
                for (j = 0; j < 8; j++)
                {
                    if ((crc16 & 0x01) == 1) //如果CRC最后一位是1,右移动一位后carry=1,则将CRC右移动一位后,再与POLY16=0xA001进行xor运算
                    {
                        crc16 = (crc16 >> 1) ^ 0xA001;
                    }
                    else
                    {
                        crc16 = crc16 >> 1;//如果CRC最后一位为0,则只将CRC右移一位
                    }
                }
                
            }
            string crc16_1 = string.Format("{0:X}", crc16);
            if (crc16_1.Length % 2 > 0)
            {
                crc16_1 = "0" + crc16_1;//如果高位隐藏0,则补充
            }
            crc16_1 = crc16_1.Substring(2, 2) + crc16_1.Substring(0, 2);//交换前后字节
            return crc16_1;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值