Python中如何将bytes类型参数转为字符串及八进制转义转十六进制
问题处理方案
通用bytes转字符串处理方法
- Python3环境:bytes类型内置
decode()方法,指定对应编码即可完成转换,默认编码为utf-8。示例用法:# 基础转换 str_data = byte_data.decode('utf-8') # 编码兼容异常处理,可替换errors参数为replace/ignore等适配不同场景 str_data = byte_data.decode('utf-8', errors='ignore') - Python2环境:原生str类型与bytes类型底层实现一致,如需将字节序列转换为逻辑字符串,可直接调用
str()方法,也可通过decode()指定编码完成转换。
你当前场景的实现方案
你遇到的输出不符合预期的核心原因是:命令行传入的"\000\000\000"会被sys.argv识别为原生转义文本,不会自动解析为对应的ASCII空字节,需要手动完成转义解析和格式转换。
修改后的可实现目标效果的代码如下:
import sys import ast raw_input = sys.argv[1] # 安全解析转义序列为字节数据,ast.literal_eval仅解析字面量无代码执行风险 parsed_byte = ast.literal_eval("b'%s'" % raw_input.replace("'", "\\'")) # 转换为\x前缀的十六进制表示字符串 output = ''.join('\\x%02x' % ord(c) for c in parsed_byte) print(output)
执行命令python2 test.py "\000\000\000"后,输出结果为\x00\x00\x00,符合你的预期。
内容的提问来源于stack exchange,提问作者joey.li
相关产品推荐
相关产品推荐

