IEEE 754 floats
Robert Kern
rkern at ucsd.edu
Tue Sep 14 10:16:06 EDT 2004
Dale Huffman wrote:
> Is there a simple way to convert an IEEE-754 floating point ascii
> string ( "0x40400000" = 3.0, 32bit ) into a float variable, without
> writing a function to do the math. I have transferred this across a
> network from a device I have no contol over and it sends all data as a
> string. Everything I have tried just converts from hex to decimal and
> adds a decimal point and a zero.
>
> string.atof("0x40400000") returns 1077936128.0
>
> In case I'm not explaining clearly, what I'm looking for could be
> coded in C as follows:
>
> int a = 0x40400000;
> float *ap = (float *)&a;
>
> float myFloat = *ap;
>
> Sorry if the C offeded anyone in the Py crowd but I'm new to Python
> and so far it rocks - I just don't have the basics down yet.
Take a look at the struct module.
E.g.
In [6]: import struct
In [7]: s = struct.pack('i', 0x40400000)
In [8]: s
Out[8]: '@@\x00\x00'
In [9]: struct.unpack('f', s)
Out[9]: (3.0,)
You might have to worry about endian-related issues, of course, but the
struct module allows you to handle the various cases.
--
Robert Kern
rkern at ucsd.edu
"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter
More information about the Python-list
mailing list