interpret 4 byte as 32-bit float (IEEE-754)

G.Franzkowiak g.franzkowiak at web.de
Sat Jan 15 13:37:54 EST 2005


Scott David Daniels schrieb:
> franzkowiak wrote:
> 
>> I've read some bytes from a file and just now I can't interpret 4 
>> bytes in this dates like a real value.  An extract from my program:
>> def l32(c):
>>     return ord(c[0]) + (ord(c[1])<<8) + (ord(c[2])<<16) +  
>> (ord(c[3])<<24)
>> ...
>> value = l32(f.read(4))      <---  3F 8C CC CD  should be 1.11
>>
> OK, here's the skinny (I used blocks & views to get the answer):
> 
> import struct
> bytes = ''.join(chr(int(txt, 16)) for txt in '3F 8C CC CD'.split())
> struct.unpack('>f', bytes)
> 
> I was suspicious of that first byte, thought it might be an exponent,
> since it seemed to have too many on bits in a row to be part of 1.11.
> 
> -Scott David Daniels
> Scott.Daniels at Acm.Org

Ok, I the string exist with "mystr = f.read(4)" and the solution for 
this case is in your line "struct.unpack('>f', bytes)"
But what can I do when I want the interpret the content from the Integer 
myInt  (*myInt = 0x3F8CCCCD) like 4-byte-real ?
This was stored with an othes system in a binary file to
CD CC 8C 3F and now is it in python in value. The conversion is not 
possible. It's right... one of this bytes is an exponent.
I want copy the memory content from the "value address" to "myReal 
address" and use print "%f" %myReal.
Is myReal then the right format ?
What can I do with python, in FORTH is it simple
( >f f. )

gf






More information about the Python-list mailing list