
本文讲解如何正确将连续的十六进制字符串(如 "48656c6c6f")解析为整数并转换为 ASCII 字符,避免 TypeError: 'str' object cannot be interpreted as an integer 等常见错误。
本文讲解如何正确将连续的十六进制字符串(如 `"48656c6c6f"`)解析为整数并转换为 ascii 字符,避免 `typeerror: 'str' object cannot be interpreted as an integer` 等常见错误。
在 Python 中,将形如 "48656c6c6f" 的十六进制字符串转换为可读文本时,核心在于:先将其整体解析为字节序列,再按指定编码解码。原始代码出错的根本原因在于 hex() 函数返回的是字符串(如 '0x48'),而 chr() 期望接收一个整数,导致 chr(hex(...)) 尝试用字符串调用 chr,从而抛出 TypeError。
✅ 推荐做法:使用 bytes.fromhex()(简洁、安全、高效)
该方法专为处理无前缀(如无 "0x")、偶数长度的十六进制字符串设计,自动完成分组、进制转换与字节构造:
text = "48656c6c6f" # 对应 "Hello"
result = bytes.fromhex(text).decode('ascii')
print(result) # 输出: Hello⚠️ 若需保留原始循环逻辑(例如需逐字节处理或自定义编码),请修正类型转换顺序:
- int(sel, 16) 正确得到整数(如 0x48 → 72);
- 直接传给 chr(),不要套 hex();
- 同时注意去除冗余 "0x" 前缀(bytes.fromhex() 已内置处理,无需手动拼接):
text = "48656c6c6f"
chars = []
for i in range(0, len(text), 2):
hex_pair = text[i:i+2] # 如 "48"
byte_value = int(hex_pair, 16) # → 72
chars.append(chr(byte_value))
result = ''.join(chars)
print(result) # Hello? 注意事项:
- bytes.fromhex() 要求输入字符串长度为偶数且只含十六进制字符(0-9, a-f, A-F),否则抛出 ValueError;
- 解码时需确保字节内容符合目标编码(如 ascii 仅支持 0–127;若含扩展 ASCII 或 Unicode,建议用 'utf-8');
- 避免对 int() 结果再次调用 hex()——这是引发原始错误的直接原因。
总结:优先使用 bytes.fromhex(text).decode('utf-8'),它语义清晰、性能优异、容错性好,是处理十六进制字符串转文本的标准实践。

















