如何在Bash中对Base16字符串执行大小端交换并完成Base16解码
Bash下实现Base16字符串大小端交换后转预期结果的方案
所有方案均使用Linux默认自带核心工具,无额外外部依赖,符合要求。
方案1:固定2字节(4位Base16输入)最简实现
纯Bash内置功能完成,无需调用任何外部工具:
#!/bin/bash # 输入Base16字符串 input_hex="401f" # 交换2字节大小端:拼接后2位hex + 前2位hex swapped_hex="${input_hex:2:2}${input_hex:0:2}" # 直接通过Bash算术扩展完成十六进制转十进制 result=$((0x${swapped_hex})) echo ${result}
运行后直接输出8000。
方案2:通用16位对齐Base16输入处理
适合处理更长的、按2字节对齐的Base16字符串,使用默认自带的xxd、od工具:
#!/bin/bash input_hex="401f" # 流程:Base16转二进制 → 按2字节为单位解析为无符号短整型(自动处理大小端转换)→ 输出结果 result=$(echo -n "${input_hex}" | xxd -r -p | od -An -tu2 | tr -d '[:space:]') echo ${result}
方案3:POSIX兼容awk实现
适配精简POSIX环境,无需依赖Bash特性:
echo "401f" | awk '{ # 拆分输入hex为两个字节对应的子串 first_byte = substr($0, 1, 2) second_byte = substr($0, 3, 2) # 交换字节后转十进制输出 print strtonum("0x" second_byte first_byte) }'
内容的提问来源于stack exchange,提问作者OscarAkaElvis
相关产品推荐
相关产品推荐

