perl - 对齐十六进制值的宽度

时间:2013-08-01 23:12:07

标签: perl

例如,给定十六进制值的字符串列表:

0
300
10b00
200

将这些“对齐”到4B宽度的干净方法是什么,如:

00000000
00000300
00010b00
00000200

现在我几乎计算每个字符串的长度并用零填充额外的(8-len)字节,代码看起来很愚蠢。我已经尝试过sprintf,"%08x"可以很好地处理小数,但在十六进制值上给出了Argument "A" isn't numeric in sprintf错误。谢谢!

2 个答案:

答案 0 :(得分:6)

改为使用%08s格式(因为您需要格式化打印字符串,而不是数字):

my @l = ('0', '300', '10b00', '200');
printf "%08s\n", $_ for @l;

# 00000000
# 00000300
# 00010b00
# 00000200

Demo

答案 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