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);