Cómo interpretar 4 bytes como un flotador de 32 bits usando Python

Soy un novato en el lenguaje Python y me está costando mucho hacer algo que fácilmente podría hacer con C ++ o Java, pero por alguna razón parece tan complicado hacerlo en Python. Tengo los siguientes cuatro bytes en una matriz (en orden big endian):

[0x64, 0xD8, 0x6E, 0x3F] 

Ya sé de antemano lo que representan estos bytes. Especifican el siguiente número de punto flotante de 32 bits: 0.932989

¿Cuáles son los pasos que necesito realizar usando Python (preferiblemente v3.2.1 y sin usar importaciones adicionales) para interpretar esos 4 bytes como flotante y almacenar ese número en una variable que puedo manipular como un valor de punto flotante de 32 bits? Es decir, puedo usarlo como la siguiente variable myVar = 0.932989

He intentado:

 x = [0x64, 0xd8, 0x6e, 0x3f] y = int.from_bytes(x, byteorder='little', signed=False) #interpret bytes as an unsigned little-endian integer (so far so good) z = float(y) #attempt to cast as float reinterprets integer value rather than its byte values 

y tiene la correcta interpretación de enteros esperada de esos bytes, que es 1064228964 , el problema viene al 1064228964 eso a un float 32 bits. En lugar de convertir los bytes en bruto de y como un flotador, convierte la representación entera de esos bytes, por lo que z contiene 1064228964.0 lugar del valor deseado de 0.932989 . ¿Hay tal vez algo equivalente a int.from_bytes que pueda usar para realizar esta tarea simple? Tal vez algo como float.from_bytes ?

    Para más detalles, véase Python Struct . Para su pregunta específica:

     import struct # if input is string, per @robyschek will fail on python 3 data=b'\x64\xd8\x64\x3f' print struct.unpack('f', data) # big endian #your input list1=[0x64, 0xD8, 0x6E, 0x3F] # aa=str(bytearray(list1)) # edit: this conversion wasn't needed aa= bytearray(list1) print struct.unpack(' 

    salida:

     (0.8939268589019775,) (3.193376169798871e+22,) (0.9329893589019775,) 

    Si está dispuesto a usar una gran biblioteca que realmente sirve para manejar arrays (grandes) de números de manera eficiente:

     import numpy as np data_bytes = np.array([0x64, 0xD8, 0x6E, 0x3F], dtype=np.uint8) data_as_float = data_bytes.view(dtype=np.float32) print(data_as_float) 

    Esto también funcionará en matrices de bytes grandes; entonces obtienes una serie de flotadores.