неподдерживаемые типы операндов для ^: 'байтовый массив' и 'int' (побитовый оператор) - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь сделать некоторые вычисления с bytearray для алгоритма хеширования, но продолжаю получать ошибку о ^ типах операндов. Я уже сделал несколько других методов, которые, кажется, работают хорошо, но с этим методом он продолжает получать ошибку. Ниже приведен код:

def showstate(a):
    i = 0
    buf = bytearray()
    width = 17
    print (type(a))
    while i < 8 * width:
        buf.append(buf ^  (1 and a[i])<<(7-(i%8)))
        #buf ^= (1 and a[i])<<(7-(i%8))
        #print ("absc")
        if  (((i%8) == 7) and (i)):
            print("%02x"%buf, end = '')
            buf = 0
        i += 1

Я уже пытался посмотреть тип данных, который имел a - там написано bytearray Я не вижу проблем с вычислением buf. Почему всегда ошибка с:

TypeError: unsupported operand type(s) for ^: 'bytearray' and 'int'

1 Ответ

0 голосов
/ 24 июня 2019

Кажется, проблема в том, что иногда вы воспринимаете buf как контейнер:

buf = bytearray()

А иногда вы воспринимаете buf как число:

print("%02x"%buf, end = '')
buf = 0

И иногда вы делаете оба в одной строке:

buf.append(buf ^  (1 and a[i])<<(7-(i%8)))

Эти две разные переменные нуждаются в собственных именах или вы хотите индексировать buf, когда рассматриваете его как число?

...