現在、PCのソフトからコマンドボタンを押すと、無線機にコマンドを送り、その後、あるバイナリデータがPCのテキストボックスに表示させることを実現させようとしています。
矢印で示すと、
PCのソフトコマンドボタンを押す→PCのCOMポート→無線機⇒PCのCOMポート⇒PCのソフトのテキストボックスに表示される
(→:コマンド ⇒:バイナリデータ)
Private Sub msSerialRadio_OnComm()
'変数宣言
Dim Buffer() As Byte '受信バッファの宣言
'CommEventプロパティに対する処理
Select Case msSerialRadio.CommEvent 'イベントの区分
Case comEvReceive '受信データを表示
Buffer() = msSerialRadio.Input
txtReceiveData.Text = txtReceiveData.Text + ChrB(Buffer())
…
End Select
End Sub
この場合、テキストボックスに何か入力して、コマンドボタンを押すと、文字化けしたデータが出力されてしまいます。
VB(6.0)において、可変長バイナリデータを16進数に変換して、テキストボックスに表示するには、どうしたらよいでしょうか?
> 可変長バイナリデータを16進数に変換して、
Function Dump(ByRef Bin() As Byte) As String
With CreateObject("Microsoft.XMLDOM").createElement("x")
.DataType = "bin.hex"
.NodeTypedValue = Bin
Dump = .Text
End With
End Function
ChrB(Buffer()) のBuffer()が1バイトとは決まってない
ので、ChrBでは意図した様に変換できていないという事
はないでしょうか?
魔界の仮面弁士様、ひでらん様、回答して下さいまして、本当に、ありがとうございました。
>魔界の仮面弁士様
魔界の仮面弁士様が示された関数を使い、以下のように書き換えましたら、16進数表示されたデータがテキストボックスに表示されました。
(誤1)Buffer() = msSerialRadio.Input
txtReceiveData.Text = txtReceiveData.Text + ChrB(Buffer())
(正)Buffer() = msSerialRadio.Input
txtReceiveData.Text = txtReceiveData.Text + Dump(Buffer())
正直に言いますと、驚きました。少し感動しました。
私は、まだ、VBを初めてから、日が浅く、Withステートメント等を知りませんでした。今後、さらに、VBを使いこなせるようになるために、努力をいこうと思います。本当に、ありがとうございました。
>ひでらん様
ひでらん様の仰るとおりのようです。
試しに、(誤2)のように書き換えましたら、文字化けしたデータの間に、Xが不定期に出力されました。
(誤1)Buffer() = msSerialRadio.Input
txtReceiveData.Text = txtReceiveData.Text + ChrB(Buffer())
(誤2)Buffer() = msSerialRadio.Input
txtReceiveData.Text = txtReceiveData.Text + ChrB(Buffer()) + "X"
本当に、ありがとうございました。
ツイート | ![]() |