Почему я получаю разные значения из bytes при итерации и при высчитывании шестнадцатеричного числа вручную?

Различие в значениях, которые вы получаете при итерации по объекту bytes и при вычислении шестнадцатеричного числа вручную, может быть объяснено различными представлениями чисел и способом их интерпретации.

При итерации по объекту bytes вы получаете последовательность байтов в десятичном формате, где каждый байт представлен числом от 0 до 255. Например, если у вас есть объект bytes b'x41x42', итерация по этому объекту вернет числа 65 и 66 (коды символов 'A' и 'B' в таблице ASCII).

Однако, когда вы вычисляете шестнадцатеричное число вручную, вы видите его представление в шестнадцатеричном формате. В шестнадцатеричной системе счисления числа представляются символами от 0 до 9 и буквами от A до F. То есть, символы 'A' и 'B' соответствуют значениям 10 и 11 в десятичной системе.

Поэтому, если вы хотите преобразовать значения, полученные при итерации по объекту bytes, в шестнадцатеричные числа, вам необходимо использовать соответствующие функции для преобразования типов данных и тогда результат будет соответствовать вашим ожиданиям.

В Python для конвертации чисел из десятичной системы счисления в шестнадцатеричную, вы можете использовать функцию hex(). Например:

b = b'x41x42'
for byte in b:
    hex_byte = hex(byte)
    print(hex_byte)

Этот код выведет '0x41' и '0x42', которые соответствуют шестнадцатеричному представлению чисел 65 и 66.

Итак, разница в значениях, которую вы замечаете, связана с разными способами представления чисел. При итерации по объекту bytes вы видите десятичные значения, а при вычислении шестнадцатеричного числа вручную вы используете его шестнадцатеричное представление. Вам необходимо использовать соответствующие функции для преобразования типов данных, чтобы получить нужный результат.