tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: chr(&H82)をUDPで送ると&H00になる(Winsock)
投稿日: 2013/02/09(Sat) 03:31
投稿者魔界の仮面弁士
> コマンドの実行状態がおかしかったので、Wiresharkで送信パケット?を調べると
> Chr(&H82)の部分だけ「00」となって送信されています。
Chr 関数は、「文字」の送信のために使います。
&H82 の文字はありえないため、データは破損してしまうでしょう。


> Q1.どうすれば&H82の部分を正常に送信できるようになるのでしょうか・・・
String ではなく、Byte 配列を送出してください。

http://support.microsoft.com/kb/411403/ja
http://www.cs.k.tsukuba-tech.ac.jp/labo/koba/software/winsock.html


String で渡した場合、それらは ANSI 文字に変換されて送られるため、
データによっては、化けたり欠けたりといった現象が起きることがありますが、
バイナリとして送った場合には、そうした加工が施されずに送出されます。


> Q2.現在送信文字列(result)をforで回していますが、
>  他に何かスマートな方法は無いでしょうか?
下記のような関数を用意しておくと、
 Dim bin() As Byte
 bin = HexStringToBinary("800002003282")
とするだけで、
 bin(0) = &H80
 bin(1) = &H00
 bin(2) = &H02
 bin(3) = &H00
 bin(4) = &H32
 bin(5) = &H82
を作りこめます。


Public Function BinaryToHexString(ByRef Binary() As Byte) As String
    With CreateObject("Microsoft.XMLDOM").createElement("e")
        .DataType = "bin.hex"
        .NodeTypedValue = Binary
        BinaryToHexString = .Text
    End With
End Function

Public Function HexStringToBinary(ByVal Text As String) As Byte()
    With CreateObject("Microsoft.XMLDOM").createElement("e")
        .DataType = "bin.hex"
        .Text = Text
        HexStringToBinary = .NodeTypedValue
    End With
End Function

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。