2013-02-03 164 views
1

我正在使用VB.NET,我需要通過串行發送和接收數據字節。這一切都很好,直到我需要發送類似173.我使用子例程來發送一個字節,將一個輸入作爲一個整數,並將其轉換爲一個字符來打印它。vb.net串行端口字符編碼

Private Sub PrintByte(ByVal input As Integer) 
    serialPort.Write(Chr(input)) 
End Sub 

,如果我嘗試

PrintByte(173) 

還是真的任何超過127發送63.我認爲這是一個有點古怪,於是我擡起頭來的ASCII表,它似乎63個對應於?字符。所以我認爲發生的事情是VB.NET試圖將這個數字編碼成一個它不能識別的字符,所以它只是打印一個?

我應該使用什麼編碼,以及如何實現編碼更改?

+1

你濫用字符串。您需要找出或決定用於溝通的二進制或文本編碼。 – SLaks

回答

2

這裏的問題是SerialPort.Encoding屬性。默認爲Encoding.ASCII,不能處理超過127您需要通過實際發送的字節,而不是字符來實現的方法命名PrintByte值的編碼:

Private Sub PrintByte(ByVal value As Integer) 
    Dim bytes() As Byte = {CByte(value)} 
    serialPort.Write(bytes, 0, bytes.Length) 
End Sub 
+0

我其實只是在嘗試實現這樣的功能。在發佈這篇文章後我意識到,嘗試轉換爲char來發送它是很愚蠢的,然後一旦我找到它就將其轉換回來。 –