VB6 от целого до двух байтов (C short) для передачи по последовательному - PullRequest
1 голос
/ 28 июля 2011

Я расширяю приложение VB6, которое связывается с небольшими встроенными системами для использования последовательного порта (в настоящее время они используют широковещательные передачи UDP); и, таким образом, я пытаюсь эмулировать пакеты UDP через последовательный порт.

Часть этого включает в себя длину сообщения в заголовке, которая составляет два байта.

Как я могу преобразовать целое число в VB6 в два байта (байт (2)), чтобы программа, написанная на C, которая принимает сообщение, могла преобразовать его в короткое целое число?

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Самый простой способ это сделать.

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 голос
/ 28 июля 2011

Учитывая, что это будут двоичные данные, вы должны собирать пакет в байтовом массиве, чтобы вы могли просто использовать CopyMemory для копирования из одного места в другое, просто убедитесь, что вы меняете порядок байтов с помощью htons()Функция API.

Вы также можете использовать базовую математику для назначения каждого байта:

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

Помните, что обычный порядок сетевых байтов отличается от Windows (в x86 и x64), поэтому наиболее значимый байтидет первым.

...