我有一個程序,我有數據通過串口進入,我將這個數據轉換成字節數組,然後詢問每個字節。但是,例如有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()方法。不要忽略它的返回值。 –