2017-06-16 65 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

相關問題