Python中bytes索引与hex方法输出为何存在差异?
问题解答
你的结构体按网络字节序(大端)的格式化是正确的,两种输出只是同一个字节的不同显示形式,原因如下:
bytes对象的切片/索引转成字符串时,遵循Python的显示规则:
- 如果字节对应可打印ASCII字符(ASCII码范围0x20-0x7E),直接显示该字符;
- 否则用十六进制转义格式
\xXX表示。
你的第二个字节是0x43,对应ASCII字符'C',所以bs[1:2]打印为b'C';第一个字节0x80不在可打印ASCII范围内,所以显示b'\x80'。
bytes.hex(' ')方法会直接输出每个字节对应的两位十六进制字符串,不管是否可打印,因此0x80输出"80",0x43输出"43",最终显示80 43。
你可以用以下代码验证两者是同一个值:
print(bs[1] == 0x43) # 输出True print(ord('C') == 0x43) # 输出True
内容的提问来源于stack exchange,提问作者Thundercleez
相关产品推荐
相关产品推荐

