Python 3.x 浮点数为浮点数的十六进制字符串

Python 3.x 浮点数为浮点数的十六进制字符串,python-3.x,Python 3.x,我正在使用python 3.6 我从串行通信接收到一个字符串“3F8E353F”。这是一个浮点数1.111。如何将此字符串转换为浮点数? 谢谢啊,是的。由于这是32位,请先将其解压缩为int,然后: x='3F8E353F' struct.unpack('f',struct.pack('i',int(x,16))) 在我的系统上,它提供: >>> x='3F8E353F' >>> struct.unpack('f',struct.pack('i',int(x

我正在使用python 3.6 我从串行通信接收到一个字符串“3F8E353F”。这是一个浮点数1.111。如何将此字符串转换为浮点数?
谢谢

啊,是的。由于这是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,)
>>>
非常接近预期值。但是,这可以根据系统中字节的“endianness”给出“Backward”结果。一些系统首先存储其字节最低有效字节,其他系统首先存储其字节最高有效字节。有关基于字节顺序格式化的描述符,请参阅。

我使用了
struct.unpack('f',struct.pack('I',int(x,16)))
将十六进制值转换为浮点值,但对于负值,我得到了以下错误

struct.error:参数超出范围

为了解决这个问题,我使用下面的代码将十六进制(0xc395aa3d)转换为浮点值(-299.33)。它既适用于正值,也适用于负值

x = 0xc395aa3d
struct.unpack('f', struct.pack('I', int(x,16) )) 
另一种方法是使用bytes.fromhex()


注:表格“!”适用于那些声称不记得网络字节顺序是大端还是小端的可怜人。

你试过什么吗?你能说明这两个数字是如何相等的吗
1.111.hex()
返回
0x1.1c6a7ef9db22dp+0
您能描述一下输入值如何等于
1.111
?32位浮点数吗。第31位签名。位30至23指数位22至0。签名*2^(指数-127)*(1+mantisa/2^23)=2^0*(1.11099994)我从德克萨斯仪器公司的DSP上得到这个字符串。我可以做一个函数来转换字符串可能是python有一个函数。使用float.fromhex('3F8E353F')我得到的是1066284351.0而不是1.111。如果内存用于struct.unpack文档说明了如何克服这个问题。我现在也在看,自从我看到这个错误已经有一段时间了。我编辑了我的答案来显示不同系统之间字节顺序的文档。
import struct
hexstring = '3F8E353F'
struct.unpack('!f', bytes.fromhex(hexstring))[0] 
#answer:1.1109999418258667