2010-07-18 15 views
5

Il modulo struct è utile quando si tenta di convertire dati in e da formati binari. Tuttavia, recentemente mi sono imbattuto in una specifica di formato file che utilizza the binary16 floating point format. Ho esaminato la documentazione di Python, ma non ho trovato nulla che possa convertire da e verso di esso. Quale sarebbe il modo migliore per convertire questi dati in/da float Python?binary16 in Python

risposta

4

Si può fare più o meno come si farebbe in C - vale a dire, credo, più o meno come questo ...:

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

Una ricerca rapida di Google ha rilevato http://packages.python.org/bigfloat/ che dice che ha un contesto per la manipolazione dei numeri a virgola mobile binary16. Non ho familiarità con il pacchetto, però, quindi non potrei dirti nulla su come usarlo (almeno, nient'altro che puoi leggerti nella documentazione).

2

This guy's blog post fornisce un'implementazione in entrambi e python. Usa il modulo struct, quindi lo decodifica manualmente. Non è poi così complicata una conversione.