Мигаль писал(а):Как нибудь можно скопировать содержимое одной переменной в другую разных типов, напр. тип Single в Long? Т.е. речь идет не о преобразовании типов, а именно о копировании содержимого памяти. И есть ли какие то аналоги C++ memcpy и т.п
(а вообще то необходимо разбить Single на 2 Integer).
Можно даже не копируя создать массив из n-ого количества целых чисел, ссылающийся на эти же данные. Вот код (твоя переменная называется lSing):
- Код: Выделить всё
Public Declare Function ArrPtr Lib "msvbvm60" Alias "VarPtr" (ByRef vArr() As Any) As Long
Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" _
(ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long)
Dim ASA as Long, IntArr() as Integer
ReDim IntArr(1 to ENumb)
CopyMem VarPtr(ASA), ArrPtr(IntArr), 4
CopyMem ASA+12, VarPtr(lSing), 4
Далее можете юзать (но не обновлять!) целые числа, как фрагменты Single (младшие байты начинаются с младшего индекса). И всех делов.
И еще: имеются ли в VB сдвиговые операции?
Библиотечные, наверное, есть. Но мы про них не знаем. А вот эмулировать их труда точно не представляет. Для простоты я покажу на примере байта.
Двигаем "вперёд" (от младшего к старшему):
- Код: Выделить всё
Dim lB as Byte
lB = Value
if (lB And &H80) Then
lB=(lB-128)*2+1
Else
lB=lB*2
End if
Теперь

"вертаем взад"

(от старшего к младшему):
- Код: Выделить всё
Dim lB as Byte
lB = Value
if (lB And &H1) Then
lB=(lB-1)\2+128
Else
lB=lB\2
End if
С уважением, Approximator.