2012-05-29 30 views
1

我需要通過串行端口發送字節,並且希望使用C#類SerialPort的便利來完成此操作。然而,apperas有使用這個類作爲通過串口發送原始字節,從ASCIIEncoding類文檔引用了嚴格的限制:使用SerialPort對象發送大於0x7F的字節對象

ASCIIEncoding對應於20127. Windows的代碼頁因爲ASCII是7位編碼時,ASCII字符被限制爲最低的128個Unicode字符,從U + 0000到U + 007F。如果使用由Encoding.ASCII屬性或ASCIIEncoding構造函數返回的默認編碼器,則在執行編碼操作之前,該範圍之外的字符將被替換爲問號(?)。

這不是我想要的。如果我的字節值大於0x7F,我希望它作爲該值發送,而不是編碼爲問號。我無法使用UTF-8編碼,因爲這可能會爲我的接收設備不期望的字符引入更多字節。 SerialPort.Write Method (Char[], Int32, Int32)和(在我看來愚蠢地)SerialPort.Write Method (Byte[], Int32, Int32)在傳輸之前編碼數據。

看起來,我可以創建自己的EncoderFallback類,但從我的理解,這隻允許我指定使用另一個字符而不是'?'或者我在假設這是不正確的?

那麼是否有可能發送未通過SerialPort類進行處理的字節?

+0

的SerialPort將發送**原始字節**,如果不對其進行編碼,那麼你不會得到問題標記或其他任何東西。 –

+0

我認爲這是串口的屬性。沒有什麼可以做的。 – leppie

+1

我的意思是:Serial.Port(byte [],int,int)與其他重載共享備註部分,但關於編碼的段落僅適用於使用字符串的方法,而不適用於原始字節。 –

回答

3

有一個在byte[] overload page評論:

約ASCIIEncoding備註和其他類型的編碼並不適用於這個過載。該重載使用字節數組,繞過編碼。 (它看起來像這些編碼註釋是從Write的其他重載中複製/粘貼的,那些重載 - 使用字符數組和字符串 - 確實使用編碼)。

—彌科普爾(可能是用戶mjcopple - !應該可以「前進」的聲譽)

+0

謝謝!我沒有看到這些言論!有意義的是,字節確實保持不變。 – Kerry