C#richtextbox数据在从串行端口读取时被剪裁

C#richtextbox数据在从串行端口读取时被剪裁,c#,serial-port,C#,Serial Port,我正在编写一个C#程序,它可以连续地从串行端口获取数据,并立即显示在WPF的富文本框中。问题是,当我使用下面的代码时,每个十六进制值的第一位被剪裁,我得到的输出如下 (说) 而不是 0B 3C FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF. 为什么会这样?我犯了什么错误? 我已经使用终端软件进行了检查,我收到的数据是正确的。它只是在我的程序中显

我正在编写一个C#程序,它可以连续地从串行端口获取数据,并立即显示在WPF的富文本框中。问题是,当我使用下面的代码时,每个十六进制值的第一位被剪裁,我得到的输出如下 (说)

而不是

0B 3C FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF.
为什么会这样?我犯了什么错误? 我已经使用终端软件进行了检查,我收到的数据是正确的。它只是在我的程序中显示它剪辑第一位的时候

另外,我如何分离前2个字节和最后2个字节,并阻止它显示在richtextbox上。 代码如下:

 string received_data = serialPort1.ReadExisting();
char[] store_char_array = received_data.ToCharArray();
string display_text = "" ;
foreach (var i in store_char_array)
      {
         string hex_value = String.Format("{0:X}", Convert.ToUInt32(i));
  display_text += hex_value + " ";

 }

Invoke(new Action(() => richTextBox1.AppendText(display_text)));

提前感谢

这是一个编码问题。配置串行端口时,必须添加以下内容:


SerialPort.Encoding=System.Text.Encoding.GetEncoding(28591)

改用{0:X2}格式字符串。并使用Read(),而不是ReadExisting(),这样可以得到字节而不是字符串。感谢您的耐心等待!但是用read()替换它会得到一个0的流。你可以假设read()中有一个bug或者你的代码中有一个bug。要知道先去哪里看需要时间和经验,你只有花时间才能做到。好吧!这违背了我的逻辑!sp.readexisting()工作平稳,并在richtext框中显示正确的结果,直到最高有效位(第8位)为1。当第8位为1时,4个低有效位变为1111(F),4个高有效位变为0011(3)。因此,如果我有例如7E,它在richtextbox中正确显示,但如果它是8A或9E(或任何MSB为1的字节),则richtextbox始终显示3F。数据是正确的,就像我使用readbyte时一样,一切正常,richtextbox显示正确的结果,但速度较慢。有人知道sp.readexisting为何会出现这种情况吗?
 string received_data = serialPort1.ReadExisting();
char[] store_char_array = received_data.ToCharArray();
string display_text = "" ;
foreach (var i in store_char_array)
      {
         string hex_value = String.Format("{0:X}", Convert.ToUInt32(i));
  display_text += hex_value + " ";

 }

Invoke(new Action(() => richTextBox1.AppendText(display_text)));