2010-07-18 31 views
5

當您試圖將數據轉換爲二進制格式或從二進制格式轉換數據時,struct模塊非常有用。但是,最近我遇到了一個使用the binary16 floating point format的文件格式規範。我瀏覽了Python文檔,但找不到任何可以轉換爲和從中轉換的東西。將這些數據轉換爲/從Python浮動的最佳方式是什麼?Python中的binary16

回答

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

一個快速的谷歌搜索出現了http://packages.python.org/bigfloat/,它說它有一個處理binary16浮點數的上下文。不過,我自己並不熟悉這個軟件包,所以我不能告訴你任何有關如何使用它的知識(至少,除了你可以在文檔中閱讀你自己)。

2

This guy's blog post在兩者和python中給出了一個實現。他使用struct模塊,然後手動解碼。這並不是一件複雜的轉換。