C# 自制 ModbusCRC16校验计算,校验和计算 小工具 成品与源码分享 相互学习

阿里云幸运卷,戳我领取

工作经常用到,一般是打开网页搜索在线计算工具,感觉挺麻烦,就花了几分钟时间自己做了一个。分享给大家~~
自己已经测试过,计算准确无误,可放心使用~

点击下载小工具

在这里插入图片描述

下面附上源码供大家学习交流

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace 校验计算小工具
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public byte[] StrToHex(string data)
        {
            byte[] result = new byte[data.Length / 2 + 100];
            string hexABC = "0123456789ABCDEF";
            string hexabc = "0123456789abcdef";
            byte[] buff = new byte[data.Length];
            int i;
            byte j;
            if (data.Length % 2 != 0)
            {
                MessageBox.Show("请输入偶数个字符");
                result[0] = 0;
                return result;
            }
            for (i = 0; i < data.Length; i++)
            {
                for (j = 0; j < 16; j++)
                {
                    if (data[i] == hexABC[j])
                    {
                        buff[i] = j;
                        break;
                    }
                    else if (data[i] == hexabc[j])
                    {
                        buff[i] = j;
                        break;
                    }
                    if (j == 15)
                    {
                        MessageBox.Show("请输入0-f的字符");
                        result[0] = 0;
                        return result;
                    }
                }
            }
            int point = 0;
            
            for (i = 0; i < data.Length / 2; i++)
            {
                result[i] = (byte)(buff[point] * 16 + buff[point + 1]);
                point += 2;  
            }
            return result;
        }

        public string GetHex4bit(int data)
        {
            if (data.ToString("X2").Length == 1)
            {
                return "0x000" + data.ToString("X2");
            }
            else if (data.ToString("X2").Length == 2)
            {
                return "0x00" + data.ToString("X2");
            }
            else if (data.ToString("X2").Length == 3)
            {
                return "0x0" + data.ToString("X2");
            }
            else
            {
                return "0x" + data.ToString("X2");
            }
        }

        public string checkCrc(byte[] data)
        {
            int crc = 0xFFFF;
            int i, j;
            for (j = 0; j < data.Length; j++)
            {
                crc = crc ^ data[j];
                for (i = 0; i < 8; i++)
                {
                    if ((crc & 0x0001) > 0)
                    {
                        crc = crc >> 1;
                        crc = crc ^ 0xa001;
                    }
                    else
                        crc = crc >> 1;
                }


            }
            return GetHex4bit(crc);
        }

        public string checkSum(byte[] data)
        {
            int sum = 0;
            for(int i =0;i< data.Length;i++)
            {
                sum += data[i];
            }
            sum = sum % 65535;
            return GetHex4bit(sum);
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            byte[] data = new byte[textBox1.Text.Length/2];
            data = StrToHex(textBox1.Text);
            textBox_SUM.Text = checkSum(data);
            textBox_CRC.Text = checkCrc(data);
            textBox_NUM.Text = (textBox1.Text.Length / 2).ToString();
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start("https://blog.csdn.net/tiantangmoke/article/category/8920863");
        }

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章