Подтвердить что ты не робот

Преобразование маленькой конечной строки в целое число

Я читал отсчеты из волнового файла с использованием волнового модуля, но он дает образцы в виде строки, это из-за волны, так что она немного endian (например, \x00).

Каков самый простой способ преобразовать это в целое число python или тип numpy.int16? (В конце концов это станет numpy.int16, поэтому переходить прямо там хорошо).

Код должен работать на небольших процессорах endian и big endian.

4b9b3361

Ответ 1

Модуль struct преобразует упакованные данные в значения Python и наоборот.

>>> import struct
>>> struct.unpack("<h", "\x00\x05")
(1280,)
>>> struct.unpack("<h", "\x00\x06")
(1536,)
>>> struct.unpack("<h", "\x01\x06")
(1537,)

"h" означает короткий int или 16-битный int. "& Л;" означает использование little-endian.

Ответ 2

struct отлично, если вам нужно преобразовать одно или несколько строк из 2 байтов в целые числа, но array и numpy сами являются лучшими параметрами. В частности, numpy.fromstring (вызываемый с соответствующим аргументом dtype) может напрямую преобразовывать байты из вашей строки в массив (независимо от того, что dtype is). (Если numpy.little_endian является ложным, вам придется поменять байты - см. здесь для более подробного обсуждения, но в основном вы захотите для вызова метода byteswap для объекта массива, который вы только что создали с помощью fromstring).