C# 在c中从串行端口读取字符#

C# 在c中从串行端口读取字符#,c#,serial-port,C#,Serial Port,您好,我正在使用Read()方法从串行端口读取10个字符,比如0123456789。实际上,字符是由PIC微控制器发送的 这是我的密码: serialPort1.PortName = "com4"; serialPort1.BaudRate = 9600; serialPort1.Open(); char[] result = new char[10]; serialPort1.Read(result, 0, result.Length); string s = new string(resul

您好,我正在使用Read()方法从串行端口读取10个字符,比如0123456789。实际上,字符是由PIC微控制器发送的

这是我的密码:

serialPort1.PortName = "com4";
serialPort1.BaudRate = 9600;
serialPort1.Open();
char[] result = new char[10];
serialPort1.Read(result, 0, result.Length);
string s = new string(result);
MessageBox.Show(s);
serialPort1.Close();
当我运行代码时,会出现一个消息框,只显示第一个字符。消息框中仅显示“0”


我哪里出错了???

你做错的是没有注意Read()的返回值。它告诉您读取了多少字节

串行端口是非常慢的设备,在典型的波特率设置为9600时,传输一个字节需要一毫秒。对于现代处理器来说,这是一个巨大的时间量,它可以在毫秒内轻松执行数百万条指令。Read()方法在某些字节可用时返回,如果人为地使程序变慢,以便驱动程序有足够的时间接收所有字节,则只能获得全部10个字节

一个简单的解决方法是一直调用Read(),直到您获得所有这些函数:

char[] result = new char[10];
for (int len = 0; len < result.Length; ) {
   len += serialPort1.Read(result, len, result.Length - len);
}

它现在还支持任意响应长度。只需确保数据不包含换行符。

错误之处在于没有注意Read()的返回值。它告诉您读取了多少字节

串行端口是非常慢的设备,在典型的波特率设置为9600时,传输一个字节需要一毫秒。对于现代处理器来说,这是一个巨大的时间量,它可以在毫秒内轻松执行数百万条指令。Read()方法在某些字节可用时返回,如果人为地使程序变慢,以便驱动程序有足够的时间接收所有字节,则只能获得全部10个字节

一个简单的解决方法是一直调用Read(),直到您获得所有这些函数:

char[] result = new char[10];
for (int len = 0; len < result.Length; ) {
   len += serialPort1.Read(result, len, result.Length - len);
}

它现在还支持任意响应长度。只需确保数据不包含换行符。

调试并查看结果变量中的内容。您必须先读取它,而控制器只发送了一个字符?(
serialPort1.Read
将返回读取的字节数)@AustinSalonen否控制器实际发送了10个字符。是否在两者之间发送空值?这将终止string.Debug并查看结果变量中的内容。您必须先读取它,而控制器只发送了一个字符?(
serialPort1.Read
将返回读取的字节数)@AustinSalonen否控制器实际发送了10个字符。是否在两者之间发送空值?这将终止字符串。