我需要将一些Mac数字(00163e2fbab7)转换为Mac字符串。 (用“:”)
有没有什么好方法可以将Mac号分成组?我指的是(00),(16),(3e),(2f),(ba),(b7)
我知道,List::Gen
中有一个where
函数,但我无法在我的主机中安装此软件包。那么,我该怎么做呢?
答案 0 :(得分:8)
如果您知道自己正在处理MAC地址,请使用专门为他们设计的库,例如Net::MAC
答案 1 :(得分:6)
my $mac = "00163e2fbab7";
$mac =~ s/..(?!$)\K/:/g;
print "$mac\n";
输出:
00:16:3e:2f:ba:b7
如果您没有Perl 5.10,可以使用:
$mac =~ s/(..)(?!$)/$1:/g;
答案 2 :(得分:6)
将字符串拆分为两个字符的块并使用join
将它们重新组合在一起。喜欢这个
my $mac = "00163e2fbab7";
print join ':', $mac =~ /../g;
<强>输出强>
00:16:3e:2f:ba:b7
答案 3 :(得分:1)
my ($addr,$delim,$fmt) = (q(00163e2fbab7),q(:),q(2x));
printf qq(%*v0$fmt\n),$delim, pack(q(c*),(map { hex }
(unpack(qq(A2) x int(length($addr)/2),$addr))));
带格式化选项的OUTPUT
00:16:3e:2f:ba:b7
十六进制小写$fmt = q(2x)
。
00:16:3E:2F:BA:B7
时, $fmt = q(2X)
十六进制大写。
000:022:062:047:186:183
时, $fmt = q(3i)
整数。
000:026:076:057:272:267
时, $fmt = q(3o)
八进制。
00000000:00010110:00111110:00101111:10111010:10110111
时, $fmt = q(8b)
二进制。
:XXII:LXII:XLVII:CLXXXVI:CLXXXIII
时, just kidding
罗马数字。