You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:54:02