Преобразование байтов в числа с плавающей точкой в ​​Python

У меня есть двоичный файл, который я должен проанализировать, и я использую Python. Есть ли способ взять 4 байта и преобразовать его в число с плавающей запятой одинарной точности?

7.08.2008 22:24:27
2 ОТВЕТА
РЕШЕНИЕ
>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\x0fI@'
>>> struct.unpack('f', b'\xdb\x0fI@')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
88
7.05.2016 20:53:01
Это работает только для 4 или 8 байтовых операций с плавающей запятой. Как насчет 10-байтовых операций с плавающей запятой?
dplass 3.03.2011 03:09:20
Я согласен с @dplass, как насчет других поплавков. И почему в конце этой строки есть запятая?
Startec 26.08.2014 08:57:27
@startec Вопрос был о 4-байтовых числах. Какая строка заканчивается запятой? Только кортеж из struct.unpackимеет запятую.
tzot 10.09.2014 21:17:37
хорошо, а как насчет сравнения двух чисел? >>> import struct >>> a=3.141592654 >>> print a 3.141592654 >>> a_packed=struct.pack('f', a) >>> b=struct.unpack('f', a_packed)[0] >>> print b 3.14159274101 >>> assert a==b, "A non B" Traceback (most recent call last): `Файл" <stdin> ", строка 1, в <module>` AssertionError: A non B
Petr Krampl 27.10.2015 15:58:01
Примечание: для просмотра отдельных байтов байтового массива (обозначенного b ') используйте list(). Пример: list(struct.pack('f', 3.141592654))возвращает список отдельных байтов как [219, 15, 73, 64]. Это очень удобно.
Gabriel Staples 19.08.2016 03:01:17

Просто небольшое дополнение, если вы хотите, чтобы число с плавающей запятой выводилось из метода распаковки вместо кортежа, просто напишите

>>> [x] = struct.unpack('f', b'\xdb\x0fI@')
>>> x
3.1415927410125732

Если у вас есть больше поплавков, просто напишите

>>> [x,y] = struct.unpack('ff', b'\xdb\x0fI@\x0b\x01I4')
>>> x
3.1415927410125732
>>> y
1.8719963179592014e-07
>>> 
7
26.07.2019 21:43:08