Ip到hexa格式化

时间:2015-10-25 05:41:24

标签: perl

我需要将十进制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;
}

2 个答案:

答案 0 :(得分:1)

我不完全确定您想要的输出,但是代码中存在一些问题,我将在下面列出:

  1. 不需要函数声明中的$。它设置了函数的 prototype ,它很可能不会按照您的想法执行。有关详细信息,请参阅perlsub
  2. $hexa_ip应该在被用作良好做法之前声明,以防止难以发现错误。也许你的意思是my $hexa_ip而不是my $result?无论如何,在程序开始时使用use strict来捕获此类错误。
  3. printf()打印到屏幕并仅返回布尔值。请查看sprintf以了解正确使用的功能。
  4. 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',