例如,给定十六进制值的字符串列表:
0
300
10b00
200
将这些“对齐”到4B宽度的干净方法是什么,如:
00000000
00000300
00010b00
00000200
现在我几乎计算每个字符串的长度并用零填充额外的(8-len)
字节,代码看起来很愚蠢。我已经尝试过sprintf,"%08x"
可以很好地处理小数,但在十六进制值上给出了Argument "A" isn't numeric in sprintf
错误。谢谢!
答案 0 :(得分:6)
改为使用%08s
格式(因为您需要格式化打印字符串,而不是数字):
my @l = ('0', '300', '10b00', '200');
printf "%08s\n", $_ for @l;
# 00000000
# 00000300
# 00010b00
# 00000200
答案 1 :(得分:1)
如果输入字符串不是任意字符串而是十六进制值,则应使用hex:
#!/usr/bin/env perl
use strict;
use warnings;
my @values = qw(
0
300
10b00
200
a
);
printf "%08x\n", hex for @values;
输出:
00000000 00000300 00010b00 00000200 0000000a