2011-07-28 28 views
0

我正在擴大VB6應用程序與小型嵌入式系統通信使用串行端口(他們目前使用UDP廣播);因此我試圖通過串行模擬UDP數據包。VB6整數到兩個字節(C短)通過串行發送

其中一部分包括頭部中的消息長度,其長度爲兩個字節。

如何將VB6中的整數轉換爲兩個字節(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從一個位置複製到另一個位置,只需確保使用htons() API交換字節順序功能。

您還可以使用基本的數學運用到各字節分配:

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

記住了網絡的正常字節順序是不同的到Windows(在x86和x64)等最爲顯著字節先行。

+0

我不同意「網絡字節順序與Windows不同」。網絡數據包上的字節順序是發送源將其發送的順序(通常是根據某種協議規範的預定義和固定順序)。所以應該謹慎使用'CopyMemory',因爲整數/字/浮點的字節順序是由運行應用程序的處理器的字節順序決定的。 –