2011-07-28 10 views
0

小型の組み込みシステムと通信するVB6アプリケーションを拡張しています(現在はUDPブロードキャストを使用しています)。シリアルUDPパケットをエミュレートしようとしています。シリアル経由で送信するVB6の整数(Cショート)

これには、ヘッダー内のメッセージ長(2バイト長)が含まれます。

VB6の整数を2バイト(byte(2))に変換して、メッセージを受け取ったCで書かれたプログラムが短い整数に変換できるようにするにはどうすればよいですか?

答えて

2

最も簡単な方法はこれを行うことです。

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 
1

バイナリデータであるので、パケットをバイト配列で作成してCopyMemoryを使用して1つの場所から別の場所にコピーすることができます。htons() APIを使用してバイトオーダーをスワップしてください関数。

ます。また、各バイトを割り当てるために、基本的な数学を使用することができます。

byte0 = (value And &H0000FF00&)/&H100 
byte1 = (value And &H000000FF&) 

は、通常のネットワークバイトオーダーを忘れないでくださいは、Windows(x86およびx64上)に異なっているので、最上位バイトが最初になります。

+0

「ネットワークのバイトオーダーはWindowsとは異なります」という意見に同意します。ネットワークパケット上のバイトオーダは、送信元がそれを送信する順序(これは、通常、あるプロトコル仕様に従った所定の固定順序である)である。したがって、整数/ワード/浮動小数点のバイトオーダーは、アプリケーションが実行されるプロセッサーのバイトオーダーによって決まるため、 'CopyMemory'は慎重に使用する必要があります。 –

関連する問題