2017-06-16 48 views
0

Iam工作在python 3.6 我从串行通信接收字符串'3F8E353F'。这是一个浮点数1.111。如何将此字符串转换为浮点数? 谢谢十六进制字符串与浮点数浮动

+0

你尝试过什么吗? – Hima

+0

你能展示这两个数字是如何相等的吗? '1.111.hex()'返回'0x1.1c6a7ef9db22dp + 0' – rassar

+0

你能描述一下输入值如何等于1.111吗? –

回答

1

啊是的。由于这是32位,把它解压到第一那么int

x='3F8E353F' 
struct.unpack('f',struct.pack('i',int(x,16))) 

在我的系统这给:

>>> x='3F8E353F' 
>>> struct.unpack('f',struct.pack('i',int(x,16))) 
(1.1109999418258667,) 
>>> 

非常接近预期值。但是,这可以根据系统中字节的'字节顺序'给出'后向'结果。一些系统首先存储它们的字节最低有效字节,其他最重要字节首先存储。请参阅this reference page以根据字节顺序对描述符进行格式化。

+0

获得1.111 - 即期望:''0x1.1c6a7ef9db22dp + 0''作为输入... –

+0

与float.fromhex('3F8E353F')我得到1066284351.0而不是1.111。 –

+0

如果内存服务struct.unpack文档告诉如何克服这一点。我现在也看了,已经有一段时间了,因为我看到这个错误 – TomServo

相关问题