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 プロパティです。これは、127 を超える値を処理できないエンコーディングである Encoding.ASCII にデフォルト設定されます。文字ではなくバイトを実際に送信することにより、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 に答える