如何在Bash中将字符串转换为指定格式的自定义十六进制表示
Bash实现字符转指定格式十六进制编码方案
方案1:管道流式处理(适合处理大文本/管道输入)
你现有的od命令已经能输出空格分隔的单字节十六进制值,只需要追加awk处理即可:
echo -n "AaAa" | od -A n -t x1 | awk '{for(i=1;i<=NF;i++) printf "%%<%s>", $i}'
命令说明:
od -A n -t x1:不输出地址偏移,按单字节输出小写十六进制值awk遍历所有输出字段,每个字段按%<xx>格式格式化输出,%%是转义输出%符号
方案2:纯Bash实现(适合短字符串处理,无外部依赖)
# 替换为你要处理的字符串 input_str="AaAa" output_str="" for ((i=0; i<${#input_str}; i++)); do # 取单个字符 c=${input_str:i:1} # 转两位十六进制 hex_val=$(printf "%02x" "'$c") # 拼接结果 output_str+="%<$hex_val>" done echo "$output_str"
逻辑对应你的需求步骤:
- 遍历字符串索引取单个字符,完成字符拆分
- 利用
printf内置特性,单引号开头的字符参数会返回ASCII值,转成两位十六进制 - 拼接时直接包裹
%<和>后缀 - 循环结束得到完整拼接后的结果
内容的提问来源于stack exchange,提问作者Dbl
相关产品推荐
相关产品推荐

