Python сравнивает каждые 2 байта в некоторой части данных - PullRequest
1 голос
/ 28 мая 2011

Предположим, что в Python есть данные, когда я запускаю ...

search = target.readframes(2205)

Каждый кадр состоит из 2 байтов.Я хочу сравнить каждое 2-байтовое значение и извлечь самые высокие 2 значения в диапазоне.

Например, если данные выглядят так ...

0000|0001|0002|0008|0007|000F|000D|000A|00FB|00FC|00FA|00F9|00F8|00D7|00C3|0000

Тогда результат извлечет000F и 00FC

Может кто-нибудь, пожалуйста, помогите мне достичь этого.Любые ответы или полезные советы будут великолепны.

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Во-первых, вы должны использовать только bytes объекты, если вы имеете дело с двоичными данными. Они требуют Python 2.6 +.

Пример

data = b"\x42\x43\x44\x45"
print(data[0:2], data[2:4])

И да, вы можете использовать обычные операции сравнения с байтами.

Я не уверен, что тип объекта возвращается вашим readframes, но если он не является байтом, вы должны преобразовать его в байты. Вы можете просто использовать data = bytes(obj).

Не использовать строки для обработки двоичных данных .

0 голосов
/ 28 мая 2011

Я понимаю, что вы обрабатываете аудиоданные (предполагая, что target - это объект wave.Wave_read) и хотите найти максимальное значение для каждого канала.

import audioop

channel_l= audioop.tomono(search, 2, 1.0, 0.0)
channel_r= audioop.tomono(search, 2, 0.0, 1.0)
max_l= audioop.max(channel_l, 2)
max_r= audioop.max(channel_r, 2)

Если да, вы должны быть более четкими в своих вопросах;если нет, не стесняйтесь понизить голосование, как бесполезные люди:)

...