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

ami*_*gal 5 linux bash shell hex

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

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

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

谢谢,Amigal

unw*_*ind 6

运行它printf:

$ printf "%02s" 0xf
0f
Run Code Online (Sandbox Code Playgroud)

如果你只在变量中有数字的数字,比如说$NUMBER,你可以0x直接将它与所需的前缀连接起来:

$ NUMBER=fea
$ printf "%04x" 0x$NUMBER
0fea
Run Code Online (Sandbox Code Playgroud)


use*_*342 6

跳过转换部分,bcprintf命令转换十进制数:

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

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

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

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