我有一个数字(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”。
关心建议?我正在考虑分裂功能..
答案 0 :(得分:7)
您实际上不必转换为二进制字符串,只需要32位整数:
print join '.', unpack('CCCC', pack('N', 3232251030));
将打印192.168.60.150
答案 1 :(得分:7)
say join('.', unpack('C4', pack('N', 3232251030)));
和
use Socket qw( inet_ntoa );
say inet_ntoa(pack('N', 3232251030));
两个输出
192.168.60.150