在解压缩浮点数时,“解包需要长度为4的字符串参数”?

我正在尝试使用以下方法将十六进制值转换为float(Python 2.7):

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

我注意到我得到了非常小的值的异常消息.在这种情况下,是否有正确的方法将十六进制值转换为浮点值.

最佳答案
您需要四个字节来解压缩,因此必要时预先添加空字节:

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即可.

转载注明原文:在解压缩浮点数时,“解包需要长度为4的字符串参数”? - 代码日志