我有个问题。我必须用 2 位数字表示每个数字(即 0F 而不是 F)
我的代码看起来像这样:
1. 读取的 ascii 字符数在环境变量中(使用 wc -w)
2. 将此数字转换为十六进制(使用 bc)。
如何确保我在第 2 阶段之后获得的数字包含前导 0(如有必要)
谢谢,阿米格尔
运行它printf
:
$ printf "%02s" 0xf
0f
如果您仅在变量中包含数字的数字,例如$NUMBER
,您可以直接将其与所需的0x
前缀连接:
$ NUMBER=fea
$ printf "%04x" 0x$NUMBER
0fea
跳过转换部分,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
)。