Получите "бит" для float в Python? Я ищу эквивалент Python Java Float.floatToBits. Я нашел этот Python: получить и манипулировать (как целые) битовые шаблоны поплавков, но кто-нибудь знает об менее сложном способе? Ответ 1 Ответ, который Алекс Мартелли дает в этом вопросе, действительно очень прост - вы можете уменьшить его до: >>> 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 Ответ 2 Ниже приведено 64-битное, малое конечное представление python float 1 чтобы добавить к обсуждению: >>> import struct >>> import binascii >>> print('0x' + binascii.hexlify(struct.pack('<d', 123.456789))) 0x0b0bee073cdd5e40 Литература: struct.pack спецификаторы формата endianness и byte binascii.hexlify [1], например, мне это было необходимо специально для взаимодействия с .NET BitConverter на intel (т.е. немного endian)суб > Ответ 3 >>> import ctypes >>> f = ctypes.c_float(173.3125) >>> ctypes.c_int.from_address(ctypes.addressof(f)).value 1127043072
Ответ 1 Ответ, который Алекс Мартелли дает в этом вопросе, действительно очень прост - вы можете уменьшить его до: >>> 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
Ответ 2 Ниже приведено 64-битное, малое конечное представление python float 1 чтобы добавить к обсуждению: >>> import struct >>> import binascii >>> print('0x' + binascii.hexlify(struct.pack('<d', 123.456789))) 0x0b0bee073cdd5e40 Литература: struct.pack спецификаторы формата endianness и byte binascii.hexlify [1], например, мне это было необходимо специально для взаимодействия с .NET BitConverter на intel (т.е. немного endian)суб >
Ответ 3 >>> import ctypes >>> f = ctypes.c_float(173.3125) >>> ctypes.c_int.from_address(ctypes.addressof(f)).value 1127043072