2010-07-18 8 views
5

El módulo struct es útil cuando intenta convertir datos hacia y desde formatos binarios. Sin embargo, recientemente encontré una especificación de formato de archivo que usa the binary16 floating point format. Revisé la documentación de Python, pero no puedo encontrar nada que pueda convertir ay desde ella. ¿Cuál sería la mejor manera de convertir estos datos a/de las carrozas de Python?binary16 en Python

Respuesta

4

Puede hacerlo más o menos igual que lo harías en C - es decir, creo que, más o menos 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 
1

Apareció una búsqueda rápida en Google http://packages.python.org/bigfloat/ que dice que tiene un contexto para la manipulación de binary16 números de coma flotante. Aunque no estoy familiarizado con el paquete, así que no puedo decirle nada sobre cómo usarlo (al menos, nada más de lo que puede leer en la documentación).

2

This guy's blog post ofrece una implementación en ambos y python. Él usa el módulo struct, luego lo decodifica manualmente. No es tan complicado una conversión.