Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从串行端口接收的数据具有不正确的新行字符_C#_Serial Port - Fatal编程技术网

C# 从串行端口接收的数据具有不正确的新行字符

C# 从串行端口接收的数据具有不正确的新行字符,c#,serial-port,C#,Serial Port,我已经编写了一个应用程序,将数据发送到COM端口并接收返回的数据 发送效果很好,但接收效果不好。多行和只读文本框中的新行字符不正确 截图: 我的接收代码是: void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) { byte[] data = new byte[_serialPort.BytesToRead]; _serialPort.Read(data, 0, data.Length);

我已经编写了一个应用程序,将数据发送到COM端口并接收返回的数据

发送效果很好,但接收效果不好。多行和只读文本框中的新行字符不正确

截图:

我的接收代码是:

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e)
{
    byte[] data = new byte[_serialPort.BytesToRead];
    _serialPort.Read(data, 0, data.Length);

    string str = System.Text.Encoding.UTF8.GetString(data);

    textBox3.Text = textBox3.Text + str;

    textBox3.SelectionStart = textBox3.TextLength;
    textBox3.ScrollToCaret();
}
在打开端口之前,我将新行属性设置为\r\n:

_serialPort.NewLine = "\r\n";
如何解决此问题?

尝试以下方法:

_serialPort.NewLine = Environment.NewLine;
发件人:

获取或设置用于解释调用结束的值 ReadLine和WriteLine方法

关键在于它使用来解释通话结束,而不是设置通话结束

NewLine属性处理SerialPort对象如何解释传入数据。它不会处理传入的数据

换句话说,通过将换行符属性设置为“\r\n”,您告诉它查找“\r\n”,并将其用作换行符

进入串行端口的数据就是它本身。您无法更改其他人发送数据的方式。(除非您也编写了该应用程序。)您只能告诉SerialPort如何正确读取数据

您需要做的是找出程序发送给您的内容,并将.NewLine属性设置为该值。很可能只是发送“\n”或“\r”,因此如果将换行符属性设置为匹配,程序将开始正确识别发送给它的换行符

中还有一些信息可能会有所帮助。解决方案是:

textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n");

这种方法可能存在的问题是,由于数据是通过COM端口输入的,因此它很可能来自另一台计算机,而这台计算机可能使用或可能不使用相同的环境(甚至是相同的操作系统)。