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