Python ASCII编解码后字符串追加至列表变为十六进制格式问题求解
问题原因解释
核心错误是int.to_bytes()方法的参数使用不符合预期:
int.to_bytes(length, byteorder)的第一个参数length指定生成字节串的总长度,你直接传入了字符对应的ASCII整数值作为长度:比如字符H的ASCII值是72,调用byte_int.to_bytes(72, 'big')会生成72字节长度的大端序字节串,除了最后1字节是H对应的ASCII编码值,前面71字节都会被自动填充为\x00空字节。- 单独执行
print(output_data)时,终端不会渲染不可见的空字节,你只会看到正常的H/e/l/l/o输出;但打印列表时,Python会输出字符串的原始字面量表示,所有空字节的转义格式\x00都会被完整输出,就出现了你看到的“字符串莫名被转换为十六进制格式”的现象。
修复方案
将to_bytes的第一个长度参数改为1即可,ASCII字符仅占用1字节长度;同时不建议用bytes作为变量名,会覆盖Python内置的bytes类型,优化后代码如下:
byte_list = [] output_list = [] input_data = "Hello" for b in input_data: new_byte = bin(int.from_bytes(b.encode('ascii'), 'big')) byte_list.append(new_byte) for x in byte_list: print(x) for byte in byte_list: byte_int = int(byte, 2) # 长度参数指定为1,仅生成1字节的对应ASCII编码 output_data = byte_int.to_bytes(1, 'big').decode('ascii') print(output_data) output_list.append(output_data) print(output_list)
修复后最终输出的列表为:
['H', 'e', 'l', 'l', 'o']
内容的提问来源于stack exchange,提问作者AryS
相关产品推荐
相关产品推荐

