我正在尝试从串口读取十进制值,它发送给我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));
}
答案 0 :(得分:1)
首先,让我们解释一下奇怪的结果:
值1000太大而无法放入一个字节。十进制1000的十六进制值为0x3E8。由于串行端口一次只能发送一个字节,因此下部0xE8将被发送。 0xE8的十进制值是...... 232.因此,完全解释了从1000到232的看似奇怪的转换。
该怎么办?底线是你不能在C#Byte结构中填充任何大于255的值(或者对于SByte来说-128到127)。您没有提到发送数据的内容,因此我无法就此提出建议,但您需要将数据分解为字节以进行串行传输或将其作为字符串发送(您可以我已经评论说有效)。在SO和互联网上有很多帮助,如何做到这一点。