Читать байты из строки как float - PullRequest
1 голос
/ 08 октября 2009

У меня есть веб-сервер Python, где небольшие двоичные файлы являются POST: ред. Размещенные данные представлены в виде строк. Я хочу изучить содержимое этих строк. Но для этого мне нужно преобразовать каждые 4 байта в число с плавающей точкой (little-endian). Как ты это делаешь?

Ответы [ 3 ]

7 голосов
/ 08 октября 2009

Вы используете модуль struct :

>>> import struct
>>> struct.unpack_from("f", "\43\a3\12\32")
(8.6198787687447256e-33,)
5 голосов
/ 08 октября 2009

Хотя struct лучше всего подходит для распаковки коллекции «скалярных» двоичных значений, когда у вас есть последовательность 4-байтовых двоичных операций с плавающей запятой в строке один за другим, модуль array идеально. В частности, это так просто, как:

import array
thefloats = array.array('f', thestring)

Если только часть thestring содержит последовательность 4-байтовых двоичных чисел с плавающей запятой, вы можете построить массив из этой части, используя соответствующий фрагмент строки вместо всей строки. Экземпляр array предлагает большую часть функциональности list (плюс удобные методы для преобразования в / из строк байтов и переключения между формами с прямым и обратным порядком байтов при необходимости), но он менее гибок (могут быть только плавающие числа в массиве) и значительно более компактный (может занимать в 3-4 раза меньше памяти, чем список с такими же элементами).

1 голос
/ 08 октября 2009

Модуль construct также может быть удобным способом сделать это. этот пример должен легко адаптироваться к вашим потребностям:

# [U]nsigned, [L]ittle endian, 16 bit wide integer (parsing)
>>> ULInt16("foo").parse("\x01\x02")
513
...