Я работаю над аудиокодеками в Python (yikes), используя байтовые массивы для редактирования отдельных байтовых данных из аудиофайла.
Я имею в виду определенное шифрование, которое требует от меня выполнения побитовых операций над отдельными байтами, хранящимися в байтовом массиве.
Одной из этих операций является оператор ~
(поразрядно НЕ), который по существу инвертирует бит (b'0001
становится b'1110
).
Проблема в том, что когда вы ссылаетесь на один элемент байтового массива, он возвращает целое число (по умолчанию Python рассматривает нетипизированные 8-битные целые числа данных?). Целые числа в Python по умолчанию подписаны (я не думаю, что целые числа без знака даже существуют в Python).
Когда вы пытаетесь выполнить побитовое НЕ для байта в байтовом массиве, вы получаете следующую ошибку:
>>> array[0] = ~array[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: byte must be in range(0, 256)
Это потому, что он ожидает неподписанного целого числа в диапазоне 0-255. Как преобразовать подписанное int в unsigned int, чтобы биты, используемые для представления обоих значений, оставались одинаковыми?
Приветствия