バイト型配列に入れた16進を10進に変換

バイト型に入れた最大FFの値を255として取り出すのは簡単ですが。

例:

Dim tmp As Long

tmp=&HFF

MsgBox tmp ‘255を表示

複数の配列にまたがった16進を10進に変換する場合についてのメモ。

バイト型配列にFFFとか代入した場合、1つの変数にはFFが最大ですから、

2つの変数に分けて、F,FFと代入されます。

これを、F=15,FF=255と取り出すのではなく、FFF=4095と1つの数字で見る方法。

一度、文字列にして結合してしまえば簡単です。

Dim str(3) As Byte
Dim a As Double
Dim tmp As String

‘FFFを右寄せで代入
str(0) = 0
str(1) = 0
str(2) = 15 ‘&H0F
str(3) = 255 ‘&HFF

tmp = Hex(str(0)) & Hex(str(1)) & Hex(str(2)) & Hex(str(3))
a = Val(”&H” + tmp)

‘a=4095
MsgBox a

TCP通信でバイナリ送信

Dim m as New MemoryBlock(4)
m.byte(0)=Val(”&h54″)
m.byte(1)=Asc(”R”)
m.byte(2)=84
m.byte(3)=80
MainSocket.Write(str(m))

“TRTP”を送信している。

バイト配列が無いなーと思ったら、MemoryBlockクラスがあるのね。

文字列とバイナリを送りたいのだが、うまくまとめて書けないものだろうか。

実際に送るデータは16進で、

「54 52 54 50 48 4F 54 4C 00 01 00 02」と、

最後の00 01 00 02が文字列ではなくなってしまう。

(それ以前はTRTPHOTL)

うーむ・・・・

メモ:

msgbox “Socket Error: ” + str(MainSocket.LastErrorCode)

msgbox MainSocket.read(MainSocket.BytesAvailable)

追記:

あ、

MainSocket.Write(”TRTP” + str(m))

いけるな(笑。