View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
sali[_2_] sali[_2_] is offline
external usenet poster
 
Posts: 24
Default read a Unix binary file

"Arnaud" wrote in message
...

"sali" a écrit dans le message de news:
...
"Arnaud Boëlle" wrote in message
...
Hi,

I need to read unix binary files with Excel VBA.

The problem is not to read a binary file. I use :

Dim buffer(1 to 1000) as single
Open file For Binary As 1
Get #1, 1, buffer

The problem is that IEEE binary information are stored left-to-right in

UNIX
and right-to-left in WINDOWS
(or the contrary).

I found a first solution to this problem which is

read binary data in a buffer of byte
invert 4 by 4 the bytes of buffer
write buffer in a new binary file
read binary data

Does anyone know a better solution ?


i usualy do a in_memory_swap.

if i need to read long_int, read for bytes from file,
than, in reverse order create character (hex) representation
and let clng() function make number, or
simply multiplying read bytes like:
byte1*256^3+byte2*256^2+byte3*256+byte4



I understand the second solution you propose :
byte1*256^3+byte2*256^2+byte3*256+byte4.
How to do the same for Single ?

I don't understand the first one. How to make a character (hex)
representation ?
I've tried :

dim buffer (1 to 4) as byte
dim x as single
get #1,,buffer
x=csng(buffer) <-------- refused by the compiler !

Thank you for your help,


for i=1 to 4
hx$(i)=hex$(byte_array(i))
next
mylng=clng("&H" & hx$(2) & hx$(1) & hx$(4) & hx$(3)) 'just as example of
permutation/reconstruction

floating point number is more complicated than integer.
here is "ieee" reperesentation of 32-bit single float, bit-by-bit.
-------------
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
0 1 8 9 31

The value V represented by the word may be determined as follows:


V=(-1)**S * 2 ** (E-127) * (1.F) where "1.F" is intended to represent the
binary number created by prefixing F with an implicit leading 1 and a binary
point.
-------------------
original text from:
http://www.psc.edu/general/software/...ieee/ieee.html
[my altavista found near 1million pages dealing with ieee format, this is
just from first of them]

knowing that structure you may recalculate original value, piece-by-piece.
although, i am not sure does hi-lo byte/word swapping apply to float number,
or just integers.