我需要将十进制ip转换为hexa值。 例如:110.1.1.3至6e01:103。
但是通过使用下面的代码,我将在6e01103中获取它。我需要6e01:103或6e:01:103格式。然后需要连接六进制值64:ff9b ::,我的结束输出需要是64:ff9b :: 6e01:103。请帮助我。
sub ip_hexa($){
my $ip = shift;
my @octets = split /\./, $ip;
my $result;
foreach (@octets){
$hexa_ip = join":",printf("%02x", "$_");
}
return $hexa_ip;
}
答案 0 :(得分:1)
我不完全确定您想要的输出,但是代码中存在一些问题,我将在下面列出:
$
。它设置了函数的 prototype ,它很可能不会按照您的想法执行。有关详细信息,请参阅perlsub
。$hexa_ip
应该在被用作良好做法之前声明,以防止难以发现错误。也许你的意思是my $hexa_ip
而不是my $result
?无论如何,在程序开始时使用use strict
来捕获此类错误。printf()
打印到屏幕并仅返回布尔值。请查看sprintf
以了解正确使用的功能。join()
未正确使用。见join
。答案 1 :(得分:0)
# 6e01:103
sprintf "%x:%x",
unpack 'nn',
pack 'C4',
split /\./,
'110.1.1.3'
# 6e:01:103
sprintf "%x:%x:%x",
unpack 'CCn',
pack 'C4',
split /\./,
'110.1.1.3'
sprintf
行可以替换为join ':', map sprintf '%x',