Perl Десятичный в двоичный 32-разрядный, а затем 8-разрядный - PullRequest
1 голос
/ 24 июня 2011

У меня есть число (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 ]

7 голосов
/ 24 июня 2011
say join('.', unpack('C4', pack('N', 3232251030)));

и

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

оба выхода

192.168.60.150
7 голосов
/ 24 июня 2011

На самом деле вам не нужно преобразовывать в двоичную строку, просто 32-разрядное целое число:

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

выведет 192.168.60.150

...