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

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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.

You Might Also Like