如何在Python中存储十六进制并将其转换为ASCII?
解决十六进制值转ASCII字符串的问题
我明白你遇到的困扰了——在Python 3里直接对字符串调用decode()肯定会报错,因为只有bytes对象才有decode方法,而你操作的"0x31"是字符串类型,不是字节流。咱们一步步来搞定这个问题:
核心思路
要把0x53 0x48...这类十六进制值转成ASCII字符串,需要走这几步:
- 把输入的十六进制字符串分割成单个的十六进制标记(比如
"0x53") - 将每个十六进制标记转换成对应的整数
- 把整数序列转换成bytes对象
- 对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
相关产品推荐
相关产品推荐

