Perl十进制到二进制32位然后是8位

时间:2011-06-24 05:39:15

标签: perl binary decimal 8-bit

我有一个数字(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”。

关心建议?我正在考虑分裂功能..

2 个答案:

答案 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