C# serialPort.ReadExisting()接收数据出错
用上面的工具发出 HEX 01 23 45 67 89
发现我写的 SerailPort ComReceive 接收到的 数据
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
gComReceived_Bytes = serialPort1.BytesToRead;
gComReceived_String = serialPort1.ReadExisting();
gComReceived_IsFinish = true;
serialPort1.DiscardInBuffer();
//richTextBox1.AppendText(gComReceived_String + "\r");
//this.BeginInvoke(new cDelegate_RichTextAppend(cRichTextAppend),gComReceived_String);
}
/* 以下是结果,发现少了一个Byte
gComReceived_Bytes ==> 5
gComReceived_String ==> gComReceived_String.ToString() == 4
*/
我仔细分析,感觉是字符编码格式的问题引起的;
后来查阅很多的资料和晚上别人的评论,确定是编码格式的问题造成的;
serialPort1.Encoding = Encoding.GetEncoding("iso-8859-1");
serialPort1.Open();
在打开serialPort 之前要设定编码格式
cStrByte = Encoding.GetEncoding("iso-8859-1").GetBytes(gComReceived_String );
接收后的数据也要用iso-8859-1的编码格式
我试过GB2312,不行的,要注意!!!
--------------
以上就是解决问题的思路,另外 serialPort.Read(buf, 0, length)这个取回数据,你们自己试试吧