6

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

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

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

谢谢,阿米格尔

4

2 回答 2

6

运行它printf

$ printf "%02s" 0xf
0f

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

$ NUMBER=fea
$ printf "%04x" 0x$NUMBER
0fea
于 2012-09-20T11:36:26.450 回答
6

跳过转换部分,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)。

于 2012-09-20T16:54:19.090 回答