Я пытаюсь перевести этот Python 2 код Python 3.Транслейтинг Python 2 байта контрольной суммы калькулятор на Python 3
def calculate_checksum(packet):
total = 0
for char in packet:
total += struct.unpack('B', char)[0]
return (256 - (total % 256)) & 0xff
В Python 3 он вызывает TypeError:
total += struct.unpack('B', char)[0]
TypeError: a bytes-like object is required, not 'int'
У меня есть пытался исследовать изменения в строках и байтах, но это немного подавляющее.
Вместо этого я попробую 'bytes (char)'. но [mcve] был бы лучшим способом убедиться. –
@ Jean-FrançoisFabre: весь вызов 'struct' * избыточен *. Все, что он делает, это превратить один символ (unsigned char) в их целочисленный эквивалент для этого байта. Это функция 'ord()', в основном. За исключением Python 3, итерация по байтам уже дает вам целые числа. –
@MartijnPieters конечно! иногда я забываю посмотреть на большую картинку –