从SerialPort收到的数据> 0x7F显示为0x3F

时间:2018-06-08 17:36:08

标签: c# serial-port hex

我想将从PC上随机生成的数据发送到μC(ATmega328p),然后将其镜像回来。为此我用C#编写了一个程序(我第一次使用它)。

PC收到的每个字节,> 0xF7显示为0x3F。

μController正确接收和发送数据(我显示μC接收并在LCD上发送的所有数据)。 我还使用了两个串行终端工具(HTerm,Pololu串行发送器)来验证μC工作正常。 当PC在结束时接收/显示数据时,必定存在问题。

在textBox1中以.hex显示接收的数据

  private  void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){

        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        string outp = string.Empty;
        char[] value = indata.ToCharArray();
        foreach(char L in value){
        int V = Convert.ToInt32(L);
        outp+= string.Format("{0:x}",V);
        }

        if (outp != String.Empty)
            Invoke(new Action(() => textBox1.AppendText(outp)));
    }

EDIT2 //

我解决了这个问题。感谢kunifgunnerone提示! port.ReadExisting()的编码似乎有问题。相反,我知道使用port.Read()。

private  void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){

        int bytesToRead = port.BytesToRead;
        byte[] value = new byte[bytesToRead];
        port.Read(value,0,bytesToRead);
        string indata = BitConverter.ToString(value);
        if (indata != String.Empty)
            Invoke(new Action(() => textBox1.AppendText(indata)));
    }

1 个答案:

答案 0 :(得分:0)

如本文ASCIIEncoding.ASCII.GetBytes() Returning Unexpected Value所示,似乎在某处完成了与Encoding.ASCII.GetBytes()或ASCIIEncoding.ASCII.GetBytes()类似的处理(可能是indata.ToCharArray())。

请尝试从char[] value = indata.ToCharArray();更改为byte[] value = Encoding.GetEncoding("ISO-8859-1").GetBytes(indata);,同时将其他字符[]更改为字节[]。