これは、任意のデータをある形式から別の形式に変換する方法です。
Private Type LongByte
H1 As Byte
H2 As Byte
L1 As Byte
L2 As Byte
End Type
Private Type LongType
L As Long
End Type
Function SwapEndian(ByVal LongData as Long) as Long
Dim TempL As LongType
Dim TempLB As LongByte
Dim TempVar As Long
TempL.L = LongData
LSet TempLB = TempL
'Swap is a subroutine I wrote to swap two variables
Swap TempLB.H1, TempLB.L2
Swap TempLB.H2, TempLB.L1
LSet TempL = TempLB
TempVar = TempL.L
SwapEndian = TempVar
End Function
FileIO を扱っている場合は、TempLB の Byte フィールドを使用できます。
トリックは、VB6のあいまいなコマンドであるLSETを使用することです
.NET を使用している場合、このプロセスははるかに簡単です。ここでの秘訣は、MemoryStream を使用して個々のバイトを取得および設定することです。これで、int16/int32/int64 の計算ができるようになりました。ただし、浮動小数点データを扱っている場合は、LSET または MemoryStream を使用する方がはるかに明確で、デバッグが容易です。
Framework バージョン 1.1 以降を使用している場合は、バイト配列を使用する BitConvertor クラスがあります。
Private Structure Int32Byte
Public H1 As Byte
Public H2 As Byte
Public L1 As Byte
Public L2 As Byte
Public Function Convert() As Integer
Dim M As New MemoryStream()
Dim bR As IO.BinaryReader
Dim bW As New IO.BinaryWriter(M)
Swap(H1, L2)
Swap(H2, L1)
bW.Write(H1)
bW.Write(H2)
bW.Write(L1)
bW.Write(L2)
M.Seek(0, SeekOrigin.Begin)
bR = New IO.BinaryReader(M)
Convert = bR.ReadInt32()
End Function
End Structure