我有问题。 我必须用2位数字代表每个数字(即0F而不是F)
我的代码看起来像这样:
1.读取ascii字符的数量在环境变量中(使用wc -w)
2.将此数字转换为十六进制(使用bc)。
如何确保第2阶段后我获得的数字将包括前导0(如有必要)
谢谢, Amigal
答案 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 printf
或info coreutils printf
)。