vb.net串口字符编码

时间:2013-02-03 00:19:40

标签: vb.net character-encoding serial-port

我正在使用VB.NET,我需要通过串行发送和接收数据字节。这一切都很好,直到我需要发送类似于173的东西。我正在使用子程序发送一个字节,它将输入作为一个整数,然后将其转换为一个字符来打印它。

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

如果我尝试

PrintByte(173)

或者实际上127以上的任何东西都发送63.我觉得这有点奇怪,所以我查了一下ASCII表,它看起来63对应于?字符。所以我认为正在发生的事情是VB.NET正在尝试将该数字编码为一个它无法识别的字符,因此它只打印一个?。

我应该使用什么编码,以及如何实现编码更改?

1 个答案:

答案 0 :(得分: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