VB(6.0)において、可変長バイナリデータを16進数に変換して、テキストボックスに表示するには?

解決


ハル  2006-03-17 11:57:15  No: 130710

現在、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進数に変換して、テキストボックスに表示するには、どうしたらよいでしょうか?


魔界の仮面弁士  2006-03-17 12:49:15  No: 130711

> 可変長バイナリデータを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


ひでらん  2006-03-17 20:17:03  No: 130712

ChrB(Buffer()) のBuffer()が1バイトとは決まってない
ので、ChrBでは意図した様に変換できていないという事
はないでしょうか?


ハル  2006-03-18 05:55:53  No: 130713

魔界の仮面弁士様、ひでらん様、回答して下さいまして、本当に、ありがとうございました。

>魔界の仮面弁士様
魔界の仮面弁士様が示された関数を使い、以下のように書き換えましたら、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"
  
  本当に、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加