Преобразование маленькой конечной строки в целое число
Я читал отсчеты из волнового файла с использованием волнового модуля, но он дает образцы в виде строки, это из-за волны, так что она немного endian (например, \x00
).
Каков самый простой способ преобразовать это в целое число python или тип numpy.int16? (В конце концов это станет numpy.int16, поэтому переходить прямо там хорошо).
Код должен работать на небольших процессорах endian и big endian.
Ответы
Ответ 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
).