vb.net 串口字符编码



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

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

如果我尝试

PrintByte(173)

或者真的高于 127 的任何内容,它都会发送 63。我觉得这有点奇怪,所以我查了 ASCII 表,它似乎 63 对应于 ?字符。所以我认为正在发生的事情是 VB.NET 试图将该数字编码为它无法识别的字符,因此它只是打印一个 ?。

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

这里的问题是 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

最新更新