3

次の方法(Python 2.7)を使用して、16進値をfloatに変換しようとしています。

def hex2float(x):
    y = 0
    z = x.decode('hex') 
    try:
        y = struct.unpack('!f', z)[0]
    except:
        print sys.exc_info()[1]    
    print 'z = ' + z 
    print 'y = %s' % (y) 
    print 'x = ' + x
    return

def foo28():
    x = '615885'   #8.9398e-039
    hex2float(x)

出力は次のとおりです。

unpack requires a string argument of length 4
z = aXà
y = 0
x = 615885

非常に小さい値に対して例外メッセージが表示されることに気付きました。このような場合に16進値を浮動小数点値に変換する適切な方法はありますか?

4

1 に答える 1

8

解凍するには4バイトが必要なので、必要に応じてnullバイトを追加します。

z = x.decode('hex') 
z = '\0' * (4 - len(z)) + z

通常str.decode、値を表すために必要な数のバイトのみを出力するため、小さい値でのみ発生することがわかります。

これは完全に機能します:

>>> z = '615885'.decode("hex")
>>> z = '\0' * (4 - len(z)) + z
>>> struct.unpack('!f', z)
(8.939797951825212e-39,)

ダブルスを実行する場合でも、このソリューションは機能します。に変更4して8ください。

于 2012-05-01T18:43:53.303 に答える