1

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

0
300
10b00
200

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

00000000
00000300
00010b00
00000200

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

4

2 回答 2

6

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

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

# 00000000
# 00000300
# 00010b00
# 00000200

演示

于 2013-08-01T23:16:20.180 回答
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
于 2013-08-02T01:42:27.567 回答