我正在寻找Java的Float.floatToBits
等效的Python。
我发现了这个Python: obtain & manipulate (as integers) bit patterns of floats,但有人知道一种不那么复杂的方式吗?
答案 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