xzcnmb 发表于 2021-9-17 15:02

c# 处理16进制数据的问题 大家有没有更好的写法交流一下

最近在学习上位机 通讯协议基本了解了所以动手操作了一下
但是实际操做的时候问题又来了
那就是对接收数据的处理
因为我收发的都是16进制的数据
发送的话我会写接受的话涉及到对数据的一个提取 (接受的数据都是完整的一条需要对数据提取来选择需要的)
之后想了一下 然后网上查了一下自己写了一个出来   求大佬们批评指正(随便评分给一波public partial class Form1 : Form    {
      public Form1()
      {
            Control.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
      }

      private void Form1_Load(object sender, EventArgs e)
      {
            this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
      }

      private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)public string StringTo16(string inSting, Enum16Hex enum16)
      {
            string outString = "";
            byte[] bytes = Encoding.Default.GetBytes(inSting);
            for (int i = 0; i < bytes.Length; i++)
            {
                int strInt = Convert.ToInt16(bytes - '\0');
                string s = strInt.ToString("X");
                if (s.Length == 1)
                {
                  s = "0" + s;
                }
                s = s + AddSplitString(enum16);
                outString += s;
            }
            return outString;
      }
      {

            int count = serialPort1.BytesToRead;
         
            if (count >= 19)
            {
                byte[] buffrr = new byte;
                serialPort1.Read(buffrr, 0, count);
                label3.Text = Convert.ToString((buffrr + buffrr * 256));
                label5.Text = Convert.ToString((buffrr + buffrr * 256));
label5.Text = Convert.ToString((buffrr + buffrr * 256));)


网上的16进制转换代码如下



xzcnmb 发表于 2021-9-17 15:03

public string StringTo16(string inSting, Enum16Hex enum16)
      {
            string outString = "";
            byte[] bytes = Encoding.Default.GetBytes(inSting);
            for (int i = 0; i < bytes.Length; i++)
            {
                int strInt = Convert.ToInt16(bytes - '\0');
                string s = strInt.ToString("X");
                if (s.Length == 1)
                {
                  s = "0" + s;
                }
                s = s + AddSplitString(enum16);
                outString += s;
            }
            return outString;
      }

Light紫星 发表于 2021-9-17 15:07

自己定义一个reader和writer,然后定义一些readhead,readint,readbyte之类的函数,然后操作起来就可以很方便了,也可以把数据给包装起来,定义一个类,分析数据然后对应数据赋值给字段

GoodLand 发表于 2021-9-22 19:43

使用二进制字节数据先操作,然后再统一输出字符串,还有就是byte[]长度过长的话还是建议使用StringBuilder

wu0o0pj 发表于 2021-9-23 08:15

字节数组 转 16进制字符串?
BitConverter.ToString(bytes).Replace("-", " ")

xzcnmb 发表于 2021-9-23 15:35

wu0o0pj 发表于 2021-9-23 08:15
字节数组 转 16进制字符串?
BitConverter.ToString(bytes).Replace("-", " ")

谢谢学到了{:1_893:}

不名物 发表于 2021-9-23 17:26

用C语言很好解决,用sprintf就行

xzcnmb 发表于 2021-9-26 12:08

不名物 发表于 2021-9-23 17:26
用C语言很好解决,用sprintf就行

问题这是 c#   哈哈   已经解决了感谢交流{:301_997:}
页: [1]
查看完整版本: c# 处理16进制数据的问题 大家有没有更好的写法交流一下