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*8)) 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 -- http://mail.python.org/mailman/listinfo/python-list