Convert Bytes to Floating Point Numbers?

Convert Bytes to Floating Point Numbers?

I have a binary file that I have to parse and I'm using Python. Is there a way to take 4 bytes and convert it to a single precision floating point number?

4 Answers

>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\x0fI@'
>>> struct.unpack('f', b'\xdb\x0fI@')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
6

Just a little addition, if you want a float number as output from the unpack method instead of a tuple just write

>>> import struct
>>> [x] = struct.unpack('f', b'\xdb\x0fI@')
>>> x
3.1415927410125732

If you have more floats then just write

>>> import struct
>>> [x,y] = struct.unpack('ff', b'\xdb\x0fI@\x0b\x01I4')
>>> x
3.1415927410125732
>>> y
1.8719963179592014e-07
>>> 
1

I would add a comment but I don't have enough reputation.

Just to add some info. If you have a byte buffer containing X amount of floats, the syntax for unpacking would be:

struct.unpack('Xf', ...)

If the values are doubles the unpacking would be:

struct.unpack('Xd', ...)

Comment: let's say you are receiving a float variable via MODBUS communication protocol (2 registers, 1 int each), you can convert the message with:

floatvar = struct.unpack('f',int1.to_bytes(2,'big')+int2.to_bytes(2,'big')).

*note MODBUS is big Endian

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

James H. Sterling
Author

James H. Sterling

James Sterling reports on renewable energy developments, climate policy, ecological conservation, and green tech innovations around the globe.