14

Javaと同等のPythonを探していますFloat.floatToBits

私はこのPythonを見つけました:floatのビットパターンを(整数として)取得して操作しますが、それほど複雑でない方法を知っている人はいますか?

4

3 に答える 3

29

Alex Martelliがその質問で与える答えは、非常に単純です。次のように減らすことができます。

>>> import struct
>>> 
>>> 
>>> def floatToBits(f):
...     s = struct.pack('>f', f)
...     return struct.unpack('>l', s)[0]
...     
... 
>>> floatToBits(173.3125)
1127043072
>>> hex(_)
'0x432d5000'

整数として取得したら、必要な他の操作を実行できます。

操作の順序を逆にして、ラウンドトリップすることができます。

>>> def bitsToFloat(b):
...     s = struct.pack('>l', b)
...     return struct.unpack('>f', s)[0]

>>> bitsToFloat(0x432d5000)
173.3125
于 2013-01-21T01:09:47.027 に答える
3

これは、議論に追加するためのpythonfloat1の64ビットのリトルエンディアン表現です

>>> import struct
>>> import binascii
>>> print('0x' + binascii.hexlify(struct.pack('<d', 123.456789)))
0x0b0bee073cdd5e40

参照:


[1]たとえば、これは特に.NETのBitConverterIntel(つまりリトルエンディアン)との相互運用性のために必要でした。

于 2013-12-17T16:35:59.197 に答える
1
>>> import ctypes
>>> f = ctypes.c_float(173.3125)
>>> ctypes.c_int.from_address(ctypes.addressof(f)).value
1127043072
于 2019-10-13T10:49:49.143 に答える