首页 > 解决方案 > Perl - 将 IPv4 地址转换为十六进制

问题描述

我正在尝试编写一个 perl 脚本,要求用户输入他们的 ipv4 地址并将其转换为十六进制。例如,用户输入“130.130.68.1”将返回“0x82.0x82.0x44.0x01”。我怎样才能做到这一点?

标签: perl

解决方案


0x82.0x82.0x44.0x01

my $hex =
   join ".",
      map { sprintf "0x%02X", $_ }
         split /\./,
            $ip;

或者

my $hex = $ip =~ s/[^.]+/ sprintf "0x%02X", $& /reg;

也就是说,写 82822601 160x82.0x82.0x44.0x01是一种非常奇怪的方式,32 位数字表示。130.130.68.1

0x82824401

use Socket qw( inet_aton );

my $hex = '0x' . unpack('H*', inet_aton('130.130.68.1'));

0x82.82.44.01

use Socket qw( inet_aton );

my $hex = '0x' . join('.', unpack('(H2)*', inet_aton('130.130.68.1')));

这两者也都带有域名。


推荐阅读