I am not sure if you are still watching this thread, but I seem to have

a bit of a problem with the code sample you so graciously provided.

It seems to work in all instances, except the original example I

provided (namely, 1234567890). On my system, the number 1234567890,

gets converted to 1234567895.5.

I made a few changes to your original program, but it is largely the

same with different test samples samples. Any thoughts ??

Sample Code Below ----------------------

# Conversion of Microsoft Binary Format numbers to Python Floats

import binascii as bn

import struct as st

data = [(1234567890,'000000AF052C139F'),

(4069954144,'00000060929672A0'),

(999999.99, '703D0AD7FF237494'),

( 88888.88, '400ad7a3709c2d91'),

( 22222.22, '400ad7a3709c2d8f'),

( 33333.33, 'b047e17a54350290'),

( 1500.34, '7814ae47e18a3b8b'),

( 42345.00, '0000000000692590'),

]

def msd2float(bytes):

if sum(bytes) in [0,72,127]: #take out values that don't make

sense possible the NaN and Infinity ??

return 0.0

b = bytes[:]

sign = bytes[-2]&0x80

b[-2] |= 0x80 #hidden most sig bit in place of sign

exp = bytes[-1] - 0x80 - 56 #exponent offset

acc = 0L

for i,byte in enumerate(b[:-1]):

acc |=(long(byte)<<(i*

)

return (float(acc)*2.0**exp)*((1.,-1.)[sign!=0])

for line in data:

val = line[0]

binval = bn.unhexlify(line[1])

le_bytes = list(st.unpack('BBBBBBBB',binval))

test = msd2float(le_bytes)

print " In:",val, "\nOut:",test,"\n"

Sample Output ------------------------

C:/Python24/pythonw.exe -u "C:/pytest/dms/Test MBF.pyw"

In: 1234567890

Out: 1234567895.5

In: 4069954144

Out: 4069954144.0

In: 999999.99

Out: 999999.99

In: 88888.88

Out: 88888.88

In: 22222.22

Out: 22222.22

In: 33333.33

Out: 33333.33

In: 1500.34

Out: 1500.34

In: 42345.0

Out: 42345.0