【发布时间】:2011-10-15 06:14:06
【问题描述】:
我正在扩展一个与小型嵌入式系统通信以使用串行端口的 VB6 应用程序(它们目前使用 UDP 广播);因此我试图通过串行模拟 UDP 数据包。
其中一部分包括标头中的消息长度,即两个字节长。
如何将 VB6 中的整数转换为两个字节 ( byte(2) ),以便用 C 编写的接收消息的程序可以将其转换为短整数?
【问题讨论】:
我正在扩展一个与小型嵌入式系统通信以使用串行端口的 VB6 应用程序(它们目前使用 UDP 广播);因此我试图通过串行模拟 UDP 数据包。
其中一部分包括标头中的消息长度,即两个字节长。
如何将 VB6 中的整数转换为两个字节 ( byte(2) ),以便用 C 编写的接收消息的程序可以将其转换为短整数?
【问题讨论】:
由于它将是二进制数据,您应该在字节数组中构建数据包,这样您就可以使用 CopyMemory 从一个位置复制到另一个位置,只需确保使用 htons() 交换字节顺序API函数。
您还可以使用基本数学来分配每个字节:
byte0 = (value And &H0000FF00&) / &H100
byte1 = (value And &H000000FF&)
请记住,正常的网络字节顺序与 Windows(在 x86 和 x64 上)不同,因此最重要的字节排在前面。
【讨论】:
CopyMemory应该谨慎使用,因为整数/字/浮点数的字节顺序是由处理器运行应用程序的字节顺序决定的。
最简单的方法就是这样做。
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
【讨论】: