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

如何在Python中存储十六进制并将其转换为ASCII?

解决十六进制值转ASCII字符串的问题

我明白你遇到的困扰了——在Python 3里直接对字符串调用decode()肯定会报错,因为只有bytes对象才有decode方法,而你操作的"0x31"是字符串类型,不是字节流。咱们一步步来搞定这个问题:

核心思路

要把0x53 0x48...这类十六进制值转成ASCII字符串,需要走这几步:

  1. 把输入的十六进制字符串分割成单个的十六进制标记(比如"0x53")
  2. 将每个十六进制标记转换成对应的整数
  3. 把整数序列转换成bytes对象
  4. 对bytes对象调用decode('ascii')得到最终的ASCII字符串

完整代码示例

# 假设你的输入是这样的十六进制字符串
hex_input = "0x53 0x48 0x41 0x53 0x48 0x49"

# 步骤1:分割成单个十六进制字符串
hex_parts = hex_input.split()

# 步骤2:把每个十六进制转成整数
int_values = [int(part, 16) for part in hex_parts]

# 步骤3:将整数序列转为bytes
byte_data = bytes(int_values)

# 步骤4:解码成ASCII字符串
ascii_result = byte_data.decode("ascii")

print(ascii_result)  # 输出: SHASHI

为什么你之前的方法失败?

  • 你用int("0x31",16)得到的是整数49,但整数本身没有decode方法——必须先把整数组合成bytes对象,bytes才是可以解码的二进制数据。
  • 你尝试"0x31".decode("utf16")报错,是因为Python 3中str类型本身已经是解码后的Unicode字符串,它只有encode()方法(转成bytes),而decode()是bytes对象的方法,用来转成str。

更简洁的写法

如果想少写几行,可以把步骤合并:

ascii_result = bytes(int(h, 16) for h in "0x53 0x48 0x41 0x53 0x48 0x49".split()).decode("ascii")
print(ascii_result)  # 同样输出 SHASHI

额外注意点

如果你的十六进制值里包含ASCII范围外的字符(比如大于0x7F),直接用decode('ascii')会报错。这时候可以加上错误处理参数,比如:

byte_data.decode("ascii", errors="replace")  # 用?替换无法解码的字符
byte_data.decode("ascii", errors="ignore")   # 直接忽略无法解码的字符

内容的提问来源于stack exchange,提问作者TheMightyNight

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:28