On May 7, 6:18 pm, revuesbio <[EMAIL PROTECTED]> wrote: > On 7 mai, 03:52, John Machin <[EMAIL PROTECTED]> wrote: > > > On May 7, 7:44 am, revuesbio <[EMAIL PROTECTED]> wrote: > > > > Hi > > > Does anyone have the python version of the conversion from msbin to > > > ieee? > > > Thank u > > > Yes, Google has it. Google is your friend. Ask Google. It will lead > > you to such as: > > >http://mail.python.org/pipermail/python-list/2005-August/337817.html > > > HTH, > > John > > Thank you, > > I've already read it but the problem is always present. this script is > for double precision MBF format ( 8 bytes).
It would have been somewhat more helpful had you said what you had done so far, even posted your code ... > I try to adapt this script for single precision MBF format ( 4 bytes) > but i don't find the right float value. > > for example : 'P\xad\x02\x95' will return '0.00024924660101532936' If you know what the *correct* value is, you might like to consider shifting left by log2(correct_value/erroneous_value) :-) Do you have any known correct pairs of (mbf4 string, decimal_float value)? My attempt is below -- this is based on a couple of descriptive sources that my friend Google found, with no test data. I believe the correct answer for the above input is 1070506.0 i.e. you are out by a factor of 2 ** 32 def mbf4_as_float(s): m0, m1, m2, m3 = [ord(c) for c in s] exponent = m3 if not exponent: return 0.0 sign = m2 & 0x80 m2 |= 0x80 mant = (((m2 << 8) | m1) << 8) | m0 adj = 24 + 128 num = mant * 2.0 ** (exponent - adj) if sign: return -num return num HTH, John -- http://mail.python.org/mailman/listinfo/python-list