My machine is little-endian (Intel byte order). I need to read a binary file containing 16-bit signed integer data in Motorola/IEEE byte order ("big-endian"), then do some calculations, and finally write the resulting integer
data in a big-endian binary file.
How do I do the above in VBA, i.e. convert big-endian into little-endian and vice-versa?
The reason is, I'm processing NASA Shuttle Radar Topography Mission data (HGT file format).
Here is a subroutine that may get you started:
Public Sub ProcessData()
Dim inputFileName As String
Dim outputFileName As String
Dim wordCount As Integer
Dim i As Integer
Dim msb As Byte
Dim lsb As Byte
Dim unsignedWord As Long
Dim word As Integer
inputFileName = "C:\Input.bin"
outputFileName = "C:\Output.bin"
wordCount = FileLen(inputFileName) / 2
Open inputFileName For Binary Access Read As #1
Open outputFileName For Binary Access Write As #2
For i = 1 To wordCount
Get #1, , msb
Get #1, , lsb
unsignedWord = CLng(msb) * 256 + lsb
If unsignedWord > 32768 Then
word = -CInt(65536 - unsignedWord)
Else
word = CInt(unsignedWord)
End If
' Do something with each word.
word = -word
If word < 0 Then
unsignedWord = 65536 + word
Else
unsignedWord = word
End If
msb = CByte(unsignedWord / 256)
lsb = CByte(unsignedWord Mod 256)
Put #2, , msb
Put #2, , lsb
Next
Close #1
Close #2
End Sub