Я работаю над аудиокодеками в Python (yikes), используя байтовые массивы для редактирования отдельных байтовых данных из аудиофайла.
Я имею в виду определенное шифрование, которое требует от меня выполнения побитовых операций с отдельными байтами, хранящимися в массиве байтов.
Одной из таких операций является оператор ~
(побитовое НЕ), который по существу меняет бит (b'0001
становится b'1110
).
Проблема в том, что когда вы ссылаетесь на один элемент массива байтов, он возвращает int (учитывает ли 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)
Это потому, что он ожидает беззнаковое int в диапазоне от 0 до 255. Как мне преобразовать подписанный int в беззнаковый int, чтобы биты, используемые для представления обоих значений, остались прежними?
Ваше здоровье