Циклический битовый сдвиг всех элементов 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 - сколькибитовая у нас арифметика (после какого бита числа данные должны переехать вправо)
→ Ссылка