是字符串处理还是串口通讯有问题?

时间:2021-06-01 23:44:03
用serialport 控件做串口通讯,接受数据后

        public void serialPort_ReceiveData(object sender, SerialDataReceivedEventArgs e)
        {
            string s = ""; 
            byte[] APIcmd = new byte[34];
            this.serialPort1.Read(APIcmd, 0, APIcmd.Length);

            s = System.Text.ASCIIEncoding.ASCII.GetString(APIcmd);//这样处理得到的结果是s="123\0\0\0\0\0\0\0\0\0\0"
            //for (int i = 0; i < APIcmd.Length; i++)
            //{
            //    s += APIcmd[i].ToString();
            //}//这样处理的结果是s="495051000000000000"
            this.textBox1.Invoke(new testTextBox(stringTest), new object[] { s.Trim() });
        }

现在要得到“123",要怎么处理啊?
因为s="123\0\0\0\0\0\0\0"写入数据库的时候会有问题

7 个解决方案

#1


发送方是用串口调试助手(铭心软体)发送的,希望有人用过

#2


字符串做以下处理可以得到结果

            for (int i = 1; i < 31; i++)
            {
                s=s.Trim('\0');
            }

但是,这样又改了发送过来的原始数据,迷茫……唉……

#3


不懂,帮顶啊

#4


知道了,问题貌似出在    byte[] APIcmd = new byte[34];
没发34个字符就会以\0的方式替代
这要怎么处理呢?发送方不能固定啊……

#5


read 方法返回了取得的长度 你没有用到

 int count = this.serialPort1.Read(APIcmd, 0, APIcmd.Length);
 s = System.Text.ASCIIEncoding.ASCII.GetString(APIcmd, 0, count );//

#6


好好学习天天向上

#7


引用 5 楼 lllanm 的回复:
read 方法返回了取得的长度 你没有用到

 int count = this.serialPort1.Read(APIcmd, 0, APIcmd.Length);
 s = System.Text.ASCIIEncoding.ASCII.GetString(APIcmd, 0, count );//

ok,就是这个问题,谢谢

#1


发送方是用串口调试助手(铭心软体)发送的,希望有人用过

#2


字符串做以下处理可以得到结果

            for (int i = 1; i < 31; i++)
            {
                s=s.Trim('\0');
            }

但是,这样又改了发送过来的原始数据,迷茫……唉……

#3


不懂,帮顶啊

#4


知道了,问题貌似出在    byte[] APIcmd = new byte[34];
没发34个字符就会以\0的方式替代
这要怎么处理呢?发送方不能固定啊……

#5


read 方法返回了取得的长度 你没有用到

 int count = this.serialPort1.Read(APIcmd, 0, APIcmd.Length);
 s = System.Text.ASCIIEncoding.ASCII.GetString(APIcmd, 0, count );//

#6


好好学习天天向上

#7


引用 5 楼 lllanm 的回复:
read 方法返回了取得的长度 你没有用到

 int count = this.serialPort1.Read(APIcmd, 0, APIcmd.Length);
 s = System.Text.ASCIIEncoding.ASCII.GetString(APIcmd, 0, count );//

ok,就是这个问题,谢谢