我有一个程序,我有数据通过串口进入,我将这个数据转换成字节数组,然后询问每个字节。但是,例如有6个字节(字节[0]到字节[5]),这些都意味着各种各样的东西。但由于某种原因,最后一个字节(字节[5])在程序中总是返回一个0x63,即使通过端口输入的数据也会有所不同。我已经检查了与范围进来的数据以确认问题。下面是代码的相关部分:SerialPort字节数组始终在字节[5]上返回0x63?
SerialPort mySerialport = new SerialPort("COM3",9600, Parity.None, 8, StopBits.One);
rxString = mySerialPort.ReadExisting();
byte[] bytes = Encoding.ASCII.GetBytes(rxString);
textbox1.Clear();
if (bytes[0] == 0x12) //Header
{
if (bytes[1] == 0xA6) //Header
{
if (bytes[2] == address) //Address
{
byte A = bytes[3];
byte B = bytes[4];
var checksum = ((address + A + B)^0xFF) & 0xFF;
if (checksum == bytes[5])
{
textbox1.AppendText("Connected OK!!!");
}
else
{
textbox1.AppendText("Byte 5 = " + bytes[5]);
}
}
}
}
而且我发现,如果我在文本框中显示我的计算校验和它是一样的示波器上的校验和是什么(以字节[5])。所以它必须在代码的某个地方,字节[5]变为0x63。
谢谢,您的帮助表示赞赏...
您的代码似乎并不完整 - 例如,您不会显示您定义了“ mySerialPort',而你打开'port'并从不使用它。你也错过了一些右括号。如果您显示完整的代码打印输出,通常帮助您更容易。 – Guss
对不起,我拿出了一些我觉得不相干的东西...... – Graham
63是一个神奇的数字,与0x63不同,它是'?'的ASCII码。当必须将字节值> = 0x80转换时,由ASCIIEncoding类生成。它是SerialPort.Encoding属性的默认值。切勿使用ReadExisting()读取二进制数据,而应使用Read()方法。不要忽略它的返回值。 –