1

我有一个数字(3232251030)需要从十进制转换为二进制。一旦我得到二进制文件,我需要将它的 8 位分成数字,显示一个 IP 地址。

将十进制转换为二进制很简单:

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

您实际上不必转换为二进制字符串,只需转换为 32 位整数:

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

将打印192.168.60.150

于 2011-06-24T05:56:40.960 回答
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 回答