Python int.to_bytes()的行为不一致

Python int.to_bytes()的行为不一致,python,python-3.x,Python,Python 3.x,当我写作时: expint = 34614 expint = expint.to_bytes(2,'big') 我得到的值是expint=b'\x876'而不是b'\x87\x36'(缺少3,格式似乎错误)。然而,当我用expint=65418尝试相同的方法时,我得到了正确的结果,即b'\xff\x8a'。这可能是我使用的解释器或其他工具中的错误吗?我正在Visual Studio 2017中使用Python 3.7。这与int.to_bytes()无关,而与bytes类型本身有关 我得到

当我写作时:

expint = 34614  
expint = expint.to_bytes(2,'big')

我得到的值是expint=b'\x876'而不是b'\x87\x36'(缺少3,格式似乎错误)。然而,当我用expint=65418尝试相同的方法时,我得到了正确的结果,即b'\xff\x8a'。这可能是我使用的解释器或其他工具中的错误吗?我正在Visual Studio 2017中使用Python 3.7。

这与
int.to_bytes()
无关,而与
bytes
类型本身有关

我得到的值是expint=b'\x876',而不是b'\x87\x36'

这种抱怨没有任何意义,因为
b'\x876'
b'\x87\x36'
是一回事:

>>> b'\x87\x36'
b'\x876'
>>> b'\x87\x36' == b'\x876'
True
bytes
对象的表示形式不仅仅是十六进制转储。由于历史原因,字节字符串的语法允许许多其他选项(例如:在2.x中,我们曾假装它们可以表示文本)。规范表示(即当您打印实例时Python生成的表示)仅使用
\x
样式转义作为最后手段


在ASCII中,值为0x36的字节映射到符号
6
。(同样:我们过去常常假装可以这样表示文本。如果我们只需要处理英语和少量欧洲语言,并且可以选择在任何给定时间处理的欧洲语言,我们也可以不受影响。)

print(int.from_bytes(b'\x876',byteorder=“big”))
也证明了这一点
(34614).to_字节(2,'big').hex()
=='8736'`谢谢Karl。你启发了我。问题是我没有弄清楚输出中的尾随6应该被解释为ascii值。