串口发送十进制值1000但是使用c#接收232

时间:2017-07-23 05:01:19

标签: c# winforms c#-4.0 serial-port

我正在尝试从串口读取十进制值,它发送给我1000但我的功能只接收232.我能够正确接收值达127.此外它正确接收所有字符串值。

private void mySerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        int bytes = 255;
        byte[] buffer = new byte[bytes];
        int i = 0;

        do
        {
            bytes = mySerialPort.BytesToRead;
            mySerialPort.Read(buffer, i, bytes);
            i++;
            Thread.Sleep(100);
        } while (mySerialPort.BytesToRead != 0);
        rxInt = BitConverter.ToInt32(buffer, 0);
        this.Invoke(new EventHandler(displayDecimal));
    }

1 个答案:

答案 0 :(得分:1)

首先,让我们解释一下奇怪的结果:

值1000太大而无法放入一个字节。十进制1000的十六进制值为0x3E8。由于串行端口一次只能发送一个字节,因此下部0xE8将被发送。 0xE8的十进制值是...... 232.因此,完全解释了从1000到232的看似奇怪的转换。

该怎么办?底线是你不能在C#Byte结构中填充任何大于255的值(或者对于SByte来说-128到127)。您没有提到发送数据的内容,因此我无法就此提出建议,但您需要将数据分解为字节以进行串行传输或将其作为字符串发送(您可以我已经评论说有效)。在SO和互联网上有很多帮助,如何做到这一点。