Python调用bytearray.fromhex()得到非预期输出的原因与解决办法
原因说明
Python 中 bytes、bytearray 类型的默认打印规则是:如果字节值属于可打印 ASCII 范围(0x20 ~ 0x7E),就直接显示对应的 ASCII 字符,只有不可打印的字节才会用 \x + 两位十六进制的格式展示。
你看到的r6对应两个字节:
0x72对应 ASCII 可打印字符r0x36对应 ASCII 可打印字符6
这里只是输出展示形式和你的预期不符,字节数组本身存储的数值完全正确,没有转换错误。
实现预期输出的方法
方案1:自定义打印函数(不修改字节数组本身)
如果你只需要输出符合预期的展示格式,不需要改动原始字节数组的内容,可以自己封装打印逻辑:
def format_bytearray(ba): hex_part = ''.join(f'\\x{byte:02x}' for byte in ba) return f"bytearray(b'{hex_part}')" # 测试你的代码 my_str1 = 'AA001404' my_ba1 = bytearray.fromhex(my_str1) my_str2 = 'AA007236' my_ba2 = bytearray.fromhex(my_str2) print(my_str1) print(format_bytearray(my_ba1)) print(my_str2) print(format_bytearray(my_ba2))
方案2:快速验证转换正确性
如果你需要确认转换结果和输入的十六进制字符串一致,可以直接调用字节数组的hex()方法:
print(my_ba2.hex()) # 输出结果为 aa007236,和输入的原始字符串完全匹配,可直接证明转换正确
内容的提问来源于stack exchange,提问作者Adenomian
相关产品推荐
相关产品推荐

