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

Python3中实现bytes转特定十六进制格式字符串的方法求助

解决方案

1. 将bytes对象转换为目标字符串

在Python3中,要把b'\xaa\xbb\xcc'转成长度为3的字符串'\xaa\xbb\xcc',可以用latin-1编码解码。因为latin-1(ISO-8859-1)是单字节编码,每个字节值(0-255)对应唯一的Unicode码点,完全匹配Python2中str的字节映射逻辑:

# 从bytes转目标字符串
byte_data = b'\xaa\xbb\xcc'
target_str = byte_data.decode('latin-1')

print(len(target_str))  # 输出3
print(repr(target_str)) # 输出 '\xaa\xbb\xcc'

2. 直接从十六进制字符串转换为目标字符串

如果要从'aabbcc'直接得到'\xaa\xbb\xcc',有两种简洁方式:

方法一:先转bytes再解码

先通过binascii.a2b_hex()得到bytes,再用latin-1解码:

import binascii

hex_str = 'aabbcc'
target_str = binascii.a2b_hex(hex_str).decode('latin-1')

方法二:逐段解析十六进制并构造字符串

直接遍历十六进制字符串,每两位转成对应字符:

hex_str = 'aabbcc'
target_str = ''.join(
    chr(int(hex_str[i:i+2], 16)) 
    for i in range(0, len(hex_str), 2)
)

为什么这个方法可行?

Python2的str本质是字节序列,每个字节直接对应一个字符;而Python3的str是Unicode字符串。latin-1编码的映射规则是字节值与Unicode码点一一对应(0x00→U+0000,0xFF→U+00FF),所以解码后得到的字符串长度和原bytes长度完全一致,每个字符的底层数值也和原字节完全匹配,完美适配原库的Python2数据模型。

之前尝试的hex()、binascii.hexlify()是将bytes转换为十六进制文本字符串(比如b'\xaa'转成'aa'),方向和需求相反,所以无法得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:02