在Python中获取浮点数的“位”?

时间:2013-01-21 01:01:25

标签: python floating-point bitwise-operators

我正在寻找Java的Float.floatToBits等效的Python。

我发现了这个Python: obtain & manipulate (as integers) bit patterns of floats,但有人知道一种不那么复杂的方式吗?

3 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:2)

这是一个python float 1 的64位小端表示,只是为了添加到讨论中:

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

参考文献:


[1]例如我需要这个专门用于与.NET的BitConverter在intel上的互操作性(即小端)

答案 2 :(得分:0)

>>> import ctypes
>>> f = ctypes.c_float(173.3125)
>>> ctypes.c_int.from_address(ctypes.addressof(f)).value
1127043072