Pregunta

la struct El módulo es útil cuando intenta convertir datos yde formatos binarios.Sin embargo, recientemente me encontré con una especificación de formato de archivo que usa el formato de punto flotante binario16 .Miré a través de la documentación de Python, pero no puedo encontrar nada que pueda convertirlo y de él.¿Cuál sería la mejor manera de convertir estos datos a / desde Python Floots?

¿Fue útil?

Solución

Puedes hacerlo aproximadamente como lo harías en C - I.E., creo, aproximadamente así ...:

def tofloat(b16):
  sign = -1 if b16 & 0x8000 else +1
  expo = ( b16 & 0x7C00 ) >> 10
  prec = b16 & 0x03FF
  if expo == 0:
    return sign * (2.0 ** -24) * prec
  elif expo == 0x1F:
    return sign * float('inf')
  prec |= 0x0400
  return sign * (2.0 ** (expo - 25)) * prec

Otros consejos

El post de blog de este tipo daUna implementación en ambos y Python.Utiliza el módulo struct, luego la decodifica manualmente.No es todo lo que complicado una conversión.

Una búsqueda rápida de Google se presentó http://packages.python.org/bigfloat/ Lo que dice que tiene un contexto para la manipulación de los números de punto de flotación de binary16.Sin embargo, no estoy familiarizado con el paquete, por lo que no pude decirle nada sobre cómo usarlo (al menos, nada más de lo que puede leer en la documentación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top