我正在尝试使用(Python 2.7)将十六进制值转换为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
我注意到我收到了非常小的值的异常消息。对于这种情况,是否有正确的方法将十六进制值转换为浮点值。
答案 0 :(得分:8)
您需要解压缩四个字节,因此必要时可以预先添加空字节:
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
。