タイトル : 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 |