Python如何将字节数组按位置与字符形式分两列打印?
问题:如何将bytes数组按「字节序号、字节字符」格式打印?
我有一个较长的bytes数组,需要逐一检查每个位置的数值,希望将其以「字节序号、字节字符」的两列格式打印。目前编写的代码会将字节以整数形式输出,示例代码与期望输出如下:
示例代码
bytes = b'hola\x00chau' print(bytes) for i,byte in enumerate(bytes): print(i,byte)
期望输出
b'hola\x00chau' 0 h 1 o 2 l 3 a 4 \x00 5 c 6 h 7 a 8 u
解决方案
可以通过将单个字节整数转回bytes对象,再利用repr()获取其带转义的字符串表示来实现:
# 避免使用bytes作为变量名(它是Python内置类型) bytes_data = b'hola\x00chau' print(bytes_data) for idx, byte_val in enumerate(bytes_data): # 把单个字节整数转成bytes对象,再截取repr结果中去掉前后的b''部分 char_str = repr(bytes([byte_val]))[2:-1] print(idx, char_str)
原理说明
遍历bytes对象时,每个元素是对应的ASCII整数值。我们将单个整数重新包装成长度为1的bytes对象后,repr()会自动为不可打印字符生成标准转义字符串(比如\x00),对可打印字符则直接返回字符本身,最后截取掉repr()结果前后的b'和',就能得到期望的格式。
内容的提问来源于stack exchange,提问作者user171780
相关产品推荐
相关产品推荐

