1

10 進数から 2 進数に変換する必要がある数値 (3232251030) があります。バイナリを取得したら、その 8 ビットを数字に分割して、IP アドレスを明らかにする必要があります。

10 進数から 2 進数への変換は簡単です。

sub dec2bin { my $str = unpack("B32", pack("N", shift)); $str =~ s/^0+(?=\d)//; # otherwise you'll get leading zeros return $str; }

sub bin2dec { return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); }

e.g. $num = bin2dec('0110110'); # $num is 54 $binstr = dec2bin(54); # $binstr is 110110

参照: http://www.perlmonks.org/?node_id=2664

そこで、バイナリから 8 桁を分割し、IP アドレスを作成する数字に保存する必要があります。

$num = dec2bin('3232251030');

($num はバイナリで "11000000 10101000 01000100 00001110" です)

各 8 ビット「11000000 10101000 01000100 00001110」を「192.168.60.150」に分割して保存する必要があります。

アドバイスしますか?私はこのための分割機能を検討しています..

4

2 に答える 2

7
say join('.', unpack('C4', pack('N', 3232251030)));

use Socket qw( inet_ntoa );
say inet_ntoa(pack('N', 3232251030));

両方の出力

192.168.60.150
于 2011-06-24T07:03:02.777 に答える
7

実際にバイナリ文字列に変換する必要はなく、32 ビット整数だけです。

print join '.', unpack('CCCC', pack('N', 3232251030));

印刷します192.168.60.150

于 2011-06-24T05:56:40.960 に答える