为什么Python中list(bytestring)会返回十进制值的列表?
问题核心原理说明
Python 中的bytes类型本质是由0~255范围内整数组成的不可变序列,每个整数刚好对应1字节(8位二进制)的数值。我们平时看到的b'hello'这类打印形式只是Python为了提升可读性做的语法优化:如果字节的数值对应ASCII可打印字符,就显示为字符形式,不可打印的内容会显示为\x加两位十六进制编码的形式。
你调用list(b)时得到十进制整数序列,原因有两个:
- 遍历
bytes对象时,默认返回的就是每个字节对应的原始整数取值 - Python 展示整数时默认使用十进制格式,所以最终输出的是十进制列表
这两者本质完全等价,比如列表里的104就对应单字节01101000,刚好是ASCII字符h的编码值。
示例验证
你可以通过以下代码验证对应关系:
s = 'hello' b = s.encode() # 直接打印bytes对象会输出可读性更强的字符形式 print(b) # 输出:b'hello' # 取bytes单个元素返回的就是对应整数 print(b[0]) # 输出:104 # 整数和字符、十六进制、二进制的对应关系 print(chr(104)) # 输出:h print(hex(104)) # 输出:0x68 print(bin(104)) # 输出:0b1101000
如果你需要得到字节的十六进制表达形式,可以按如下方式处理:
hex_byte_list = [f"0x{byte:02x}" for byte in b] print(hex_byte_list) # 输出:['0x68', '0x65', '0x6c', '0x6c', '0x6f']
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

