我需要通過串行端口發送字節,並且希望使用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類進行處理的字節?
的SerialPort將發送**原始字節**,如果不對其進行編碼,那麼你不會得到問題標記或其他任何東西。 –
我認爲這是串口的屬性。沒有什麼可以做的。 – leppie
我的意思是:Serial.Port(byte [],int,int)與其他重載共享備註部分,但關於編碼的段落僅適用於使用字符串的方法,而不適用於原始字節。 –