2011-07-28 25 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',因为整数/字/浮点的字节顺序是由运行应用程序的处理器的字节顺序决定的。 –