如何用linux脚本中的两位数表示十六进制数(bash)

时间:2012-09-20 11:35:05

标签: linux bash shell hex

我有问题。 我必须用2位数字代表每个数字(即0F而不是F)

我的代码看起来像这样:
1.读取ascii字符的数量在环境变量中(使用wc -w)
2.将此数字转换为十六进制(使用bc)。

如何确保第2阶段后我获得的数字将包括前导0(如有必要)

谢谢, Amigal

2 个答案:

答案 0 :(得分:5)

通过printf

运行它
$ printf "%02s" 0xf
0f

如果您只在变量中包含数字的数字,例如$NUMBER,则可以直接将其与所需的0x前缀连接起来:

$ NUMBER=fea
$ printf "%04x" 0x$NUMBER
0fea

答案 1 :(得分:4)

跳过bc中的转换部分,并使用printf命令转换十进制数字:

#num=$(... | wc -w)
num=12  # for testing
printf "%02x" $num
0c

如果由于其他原因必须转换为十六进制,则使用0x前缀告诉printf该数字已经是十六进制:

#num=$(... | wc -w | bc ...)
num=c   # as obtained from bc
printf "%02x" 0x$num
0c

%x格式请求将数字格式化为十六进制,%2x请求填充宽度为两个字符,%02x专门请求带前导零的填充,这是您想要的。有关可能的格式字符串的详细信息,请参阅printf手册(man printfinfo coreutils printf)。