2010-07-18 6 views
5

Модуль struct полезен, когда вы пытаетесь преобразовать данные в бинарные форматы и из них. Однако недавно я столкнулся с спецификацией формата файла, которая использует the binary16 floating point format. Я просмотрел документацию Python, но не могу найти ничего, что можно было бы преобразовать в него и из него. Каким будет лучший способ конвертировать эти данные в/из плавающих Python?binary16 in Python

ответ

4

Вы можете сделать это примерно как вы могли бы сделать это в C - то есть, я думаю, примерно так ...:

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

Быстрый поиск в Google http://packages.python.org/bigfloat/, в котором говорится, что у него есть контекст для обработки чисел с плавающей запятой binary16. Я сам не знаком с самим пакетом, поэтому я не мог рассказать вам ничего о том, как его использовать (по крайней мере, не более того, что вы можете прочитать в документации).

2

This guy's blog post дает реализацию в обоих и python. Он использует модуль struct, а затем декодирует его вручную. Не все это осложняет преобразование.