(более или менее) аналогично тому, как тип int
знает, как преобразовать целочисленный экземпляр в байты, снова int
знает, как преобразовать байты обратно в целое число.
Ваша переменная xbytes
является объектом bytes
, поэтому она не знает, как преобразовать себя в целое число.
Вместо этого вы делаете это так:
intermediate_result = int.from_bytes(xbytes, byteorder='big')
(И после этого вы захотите преобразовать его в строку из 0 и 1.)
Причина, по которой он не является полностью ортогональным (при преобразовании вперед вы используете value.method()
и при обратном преобразовании вы используете type.method(value)
) заключается в том, что в прямом случае ваше значение уже имеет тип, который знает, как преобразовать себя, но в обратном случай, ваше значение другого типа, который не знает, как конвертировать обратно.
Вы также можете думать об этом на английском языке, если вам нравится:
value.to_bytes(byteorder='big')
будет Преобразовать это целочисленное «значение» в объект байтов .
int.from_bytes(value, byteorder='big')
будет Создать новый целочисленный объект из байтов "value" .