日期:2014-05-17  浏览次数:20982 次

C#串口通信遇到的问题
用C#编写串口通信时,选择字符串输入,十六进制显示
为什么输入字符串“a”时,会显示“61 0A”,我只想显示“61”,请求各位大神帮忙,代码如下:
 byte[] byteRead = new byte[sp1.BytesToRead];    //BytesToRead:sp1接收的字符个数
     if (rbRcvStr.Checked)                          //'发送字符串'单选按钮
     {
     txtReceive.Text += sp1.ReadLine()+" "; 
     sp1.DiscardInBuffer();                      //清空SerialPort控件的Buffer 
      }
      else                                            //'发送16进制按钮'
        {
           try
         {
       Byte[] receivedData = new Byte[sp1.BytesToRead];        //创建接收字节数组
      sp1.Read(receivedData, 0, receivedData.Length);         //读取数据
      sp1.DiscardInBuffer();                  //清空SerialPort控件的Buffer
     string strRcv = null;
     for (int i = 0; i < receivedData.Length; i++) //窗体显示
     {
     strRcv += receivedData[i].ToString("X2")+" ";  //16进制显示
       }
       txtReceive.Text += strRcv;

------解决方案--------------------
我猜你发的是“a"和换行符
a的ASCII码为61H,换行符的ASCII码为0AH,所以你显示的是61 0A
你发送的时候是怎么发的啊?是不是用了sp1.WriteLine("a")发送的?
改成sp1.Write("a);就可以了
------解决方案--------------------
接收:
string buf = mySerialPort.ReadExisting();
foreach (byte b in buf)
{
   textBox2.Text += b.ToString("X2") + " ";
}
发送:
mySerialPort.Write(textBox3.Text);