1

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

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

如果我尝试

PrintByte(173)

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

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

4

1 回答 1

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
于 2013-02-03T00:55:08.897 回答