Циклический битовый сдвиг всех элементов bytearray Python
Есть байтовый массив. Для шифра Магма необходимо циклически сдвинуть по битого все элементы влево на 11, т.е. первый бит первого байта становиться последним битом последнего байта. Единственное, что я придумал, это перевести в бинарный формат, выровнять по границе байта(8 бит) и склеить получив строку -
b = "11010000101110001101000010110010"
двоичное представление массива - bytearray(b'\xd0\xb8\xd0\xb2')
и через срезы сдвинуть
b[11:] + b[:11]
Вывод соответственно - 11000110 10000101 10010110 10000101
Что то мне подсказывает, что есть намного более лучшее решение. Заранее спасибо
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ответ с английского SO для данных в int:
def ISHFTC(n, d, N):
return ((n << d) % (1 << N)) | (n >> (N - d))
Где:
n- число, которое двигаем влевоd- на сколько битN- сколькибитовая у нас арифметика (после какого бита числа данные должны переехать вправо)