Python如何将命令行传入的十六进制转义字符串读取为原始字节
十六进制转义命令行参数转原始字节实现方案
前置注意事项
- 命令行输入参数时请用单引号包裹十六进制转义字符串,避免shell提前解析
\x转义序列,导致程序接收到的参数已经被转义为普通字符。正确输入示例为:--byte_arg '\x41\x41'
Python 实现方法
方法1:适配\x格式输入
如果要兼容用户带\x前缀的输入格式,可通过unicode_escape编码规则处理转义序列:
import argparse parser = argparse.ArgumentParser() parser.add_argument('--byte_arg', type=str) args = parser.parse_args() # 核心转换逻辑 raw_bytes = args.byte_arg.encode('latin1').decode('unicode_escape').encode('latin1')
转换后得到的raw_bytes即为对应原始字节,你传入'\x41\x41'时得到的结果为b'AA',每个字节的十六进制值均为0x41,符合需求。
方法2:纯十六进制输入(更推荐)
如果可以调整用户输入规则,建议让用户直接输入不带\x前缀的纯十六进制字符串,比如--byte_arg 4141,直接调用内置方法转换即可,无转义歧义:
raw_bytes = bytes.fromhex(args.byte_arg)
结果验证
你可以通过遍历字节的方式确认转换结果是否正确:
for single_byte in raw_bytes: print(hex(single_byte)) # 输出: # 0x41 # 0x41
内容的提问来源于stack exchange,提问作者Katu
相关产品推荐
相关产品推荐

