2017-06-16 51 views
0

Python 3.6で作業中です。 シリアル通信から文字列 '3F8E353F'を受け取ります。これは浮動小数点数1.111です。この文字列を浮動小数点数に変換するにはどうすればよいですか? ありがとうございます浮動小数点数を浮動小数点数に変換する

+0

試しましたか? – Hima

+0

2つの数字がどのように等しいかを表示できますか? '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

with float.fromhex( '3F8E353F')私は1.111ではなく1066284351.0を取得します。 –

+0

メモリが役立つ場合は、struct.unpackのドキュメントでこれを克服する方法が説明されています。私は今また見ている、私はこのエラーを見たのでしばらくされている – TomServo

関連する問題