【问题标题】:VB6 integer to two bytes (C short) to send over serialVB6整数到两个字节(C短)通过串行发送
【发布时间】:2011-10-15 06:14:06
【问题描述】:

我正在扩展一个与小型嵌入式系统通信以使用串行端口的 VB6 应用程序(它们目前使用 UDP 广播);因此我试图通过串行模拟 UDP 数据包。

其中一部分包括标头中的消息长度,即两个字节长。

如何将 VB6 中的整数转换为两个字节 ( byte(2) ),以便用 C 编写的接收消息的程序可以将其转换为短整数?

【问题讨论】:

    标签: c vb6 types integer


    【解决方案1】:

    由于它将是二进制数据,您应该在字节数组中构建数据包,这样您就可以使用 CopyMemory 从一个位置复制到另一个位置,只需确保使用 htons() 交换字节顺序API函数。

    您还可以使用基本数学来分配每个字节:

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

    请记住,正常的网络字节顺序与 Windows(在 x86 和 x64 上)不同,因此最重要的字节排在前面。

    【讨论】:

    • 我不同意“网络字节顺序与 Windows 不同”。网络数据包上的字节顺序是发送源发送它的顺序(根据某些协议规范,这通常是预先确定的固定顺序)。所以CopyMemory应该谨慎使用,因为整数/字/浮点数的字节顺序是由处理器运行应用程序的字节顺序决定的。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多