小型の組み込みシステムと通信するVB6アプリケーションを拡張しています(現在はUDPブロードキャストを使用しています)。シリアルUDPパケットをエミュレートしようとしています。シリアル経由で送信するVB6の整数(Cショート)
これには、ヘッダー内のメッセージ長(2バイト長)が含まれます。
VB6の整数を2バイト(byte(2))に変換して、メッセージを受け取ったCで書かれたプログラムが短い整数に変換できるようにするにはどうすればよいですか?
小型の組み込みシステムと通信するVB6アプリケーションを拡張しています(現在はUDPブロードキャストを使用しています)。シリアルUDPパケットをエミュレートしようとしています。シリアル経由で送信するVB6の整数(Cショート)
これには、ヘッダー内のメッセージ長(2バイト長)が含まれます。
VB6の整数を2バイト(byte(2))に変換して、メッセージを受け取ったCで書かれたプログラムが短い整数に変換できるようにするにはどうすればよいですか?
最も簡単な方法はこれを行うことです。
Private Type IntByte
H As Byte
L As Byte
End Type
Private Type IntType
I As Integer
End Type
Public Sub Convert(ByVal I as Integer, ByRef H as Byte, ByRef L as Byte)
Dim TempIT As IntType
Dim TempIB As IntByte
TempIT.I = I
LSet TempIB = TempIT
H = TempIT.H
L = TempIT.L
End Sub
この手法を使用して、他のデータ型をバイトに分割できます。
Private Type LongByte
H1 As Byte
H2 As Byte
L1 As Byte
L2 As Byte
End Type
Private Type DblByte
H1 As Byte
H2 As Byte
H3 As Byte
H4 As Byte
L1 As Byte
L2 As Byte
L3 As Byte
L4 As Byte
End Type
バイナリデータであるので、パケットをバイト配列で作成してCopyMemoryを使用して1つの場所から別の場所にコピーすることができます。htons()
APIを使用してバイトオーダーをスワップしてください関数。
ます。また、各バイトを割り当てるために、基本的な数学を使用することができます。
byte0 = (value And &H0000FF00&)/&H100
byte1 = (value And &H000000FF&)
は、通常のネットワークバイトオーダーを忘れないでくださいは、Windows(x86およびx64上)に異なっているので、最上位バイトが最初になります。
「ネットワークのバイトオーダーはWindowsとは異なります」という意見に同意します。ネットワークパケット上のバイトオーダは、送信元がそれを送信する順序(これは、通常、あるプロトコル仕様に従った所定の固定順序である)である。したがって、整数/ワード/浮動小数点のバイトオーダーは、アプリケーションが実行されるプロセッサーのバイトオーダーによって決まるため、 'CopyMemory'は慎重に使用する必要があります。 –