为什么十六进制5D在bytearray中被表示为bytearray(b']')?
十六进制值
5D转为bytearray显示为bytearray(b']')的原理解答 这个现象确实和ASCII编码直接相关,具体逻辑如下:
底层逻辑
- 十六进制值
0x5D对应的十进制值为93,查阅ASCII编码表可知,十进制93对应的可打印字符就是] bytearray存储的本质是原始字节数值,Python打印bytes、bytearray这类字节对象时,会默认对符合ASCII规则的字节做可读性优化,优先显示对应字符而非十六进制转义符
Python对全ASCII字符的处理规则
Python输出字节序列的字符串表示时,会对每个字节按如下规则处理:
- 若字节值落在 ASCII可打印范围(十进制32~126) 内:直接显示为对应的ASCII字符
你遇到的
0x5D就属于这个区间,因此显示为]而不是\x5d - 若字节值是 ASCII控制字符(十进制0~31、127):显示为十六进制转义格式,比如换行符对应的
0x0A会显示为\x0a - 若字节值大于127(非ASCII字节):同样显示为十六进制转义格式,比如
0xE4会显示为\xe4
验证代码示例
你可以通过以下代码验证上述规则:
# 用十六进制值构造bytearray b = bytearray([0x5D]) print(b) # 输出:bytearray(b']') # 查看字节对应的十进制值 print(int.from_bytes(b, byteorder='big')) # 输出:93 # 查看十进制值对应的ASCII字符 print(chr(93)) # 输出:]
如果需要强制查看字节的十六进制原始表示,可以调用hex()方法:
print(bytearray([0x5D]).hex()) # 输出:5d
内容的提问来源于stack exchange,提问作者mdigruber
相关产品推荐
相关产品推荐

