Я использую bytearrays в python 2.7 для анализа потока данных, поступающего из последовательного порта. Я столкнулся с странным поведением: я пытаюсь вычислить контрольную сумму полученного пакета, чтобы проверить его достоверность, но у меня возникают проблемы с функцией sum()
над bytearray. Я бы предположил, что, будучи байтарием массива байтов, он будет суммировать каждый байт друг с другом, верно? Только это не ..Сумма Bytearray в python
Например: У меня есть этот пакет
str = '200a02daffe0fe3d140500f6fff6ff6df42c0aabfe'
b = bytearray(str)
Суммируя его содержание выходов:
sum(b)
3263
Правильный результат будет
2915
в по крайней мере, это то, что говорит калькулятор. Эта функция:
def somma_hex(str):
s = 0
for i in range(0,len(str)-1,2):
s += int(byte[i:i+2],16)
выдает правильное значение, 2915.
Это не большая проблема, я могу использовать простую функцию, которую я написал вместо sum()
, но мне было интересно, что происходит?
Благодаря
Вы суммируете bytearray шестнадцатеричных цифр. Конечно, ответ будет неправильным. Попробуйте использовать 'binascii', чтобы сначала декодировать шестнадцатеричный байты. – nneonneo
Декодирование на самом деле сделал трюк. 'sum (bytearray (str.decode (" hex ")))' дает правильный результат. – powder
FWIW, 'bytearray' имеет метод [fromhex] (https://docs.python.org/3.1/library/stdtypes.html#bytearray.fromhex) – kalhartt