Forum Webscript.Ru

Программирование => Perl => Тема начата: GunJah от 30 Мая 2005, 16:29:05

Название: Бинарные данные
Отправлено: GunJah от 30 Мая 2005, 16:29:05
Заранее сорри если ответ на вопрос из разряда rtfm, я отнюдь не ленивый...

Задача следующая, нужно IP адрес х.х.х.х перевести в бинарик на каждое число ограниченное точкой по одному байту... Ту бишь из Ай-Пишника заданного строкой нужно сделать 4-байтный бинарик...
Расколотил Ай-Пишник split-ом на 4 части и возился с функциями pack и unpack, но че-то не получается...
Мож не так че делаю...
И вообще как из string-а правильно сделать binary ?
Заранее спасибо :rolleyes:


Да и еще вопросик на другую тему (сорри за оффтоп), мож есть у кого пример скрипта на Перлосе аплоада файла на вэб ?
Название: Бинарные данные
Отправлено: ondr от 30 Мая 2005, 16:45:29
по первому: поиск по форуму по слову "long"
по второму: бегом читать faq. он тут прилеплен в форуме
Название: Бинарные данные
Отправлено: GunJah от 30 Мая 2005, 17:17:29
1. Нашел только IP to Int, а мне надо IP в бинар, ту бишь 4  байта - 32 бита 0 или 1. И все это на перлосе, а не на php.

2. Читал. Я по-этому и спросил, что уже порылся в скриптах и обе ссылки там на аплоад дохлые :(

http://www.webscript.ru/scripts/Perl/Raznoe/
http://www.webscript.ru/cgi-bin/jump.cgi?ID=359

http://www.webscript.ru/scripts/Perl/Upravlenie/
http://www.webscript.ru/cgi-bin/jump.cgi?ID=86
Название: Бинарные данные
Отправлено: NeoNox от 30 Мая 2005, 17:23:10
perldoc Net::IP ?
Название: Бинарные данные
Отправлено: GunJah от 30 Мая 2005, 18:30:02
Дико извиняюсь, прочел внимательнее FAQ и конечно нашел аплоад, еще раз куча извинений :)

2 NeoNox
Большое спасибо, помогло, хороший модуль...

И все же, если не затруднит, не мог бы кто-нить дать пример, как обычную текстовую строку перевести в бинар (0 и 1) и обратно с помощью pack unpack...
Название: Бинарные данные
Отправлено: Ivan Kolesnikov от 31 Мая 2005, 07:52:11
Вот способ, правда без pack и unpack, а просто циклом:

sub ip2dec {
  my $dec = 0; my $ip = $_[0]; my @s = split(/\\./, $ip);
  for (my $i=3; $i>=0; $i--) {$dec += 256**(3-$i) * $s[$i]}
  return $dec;
}

sub dec2ip {
  my $ip = \'\'; my $dec = $_[0]; my $s;
  for (my $i=3; $i>=0; $i--) {$s = int($dec / 256**$i); $ip .= $s.\'.\'; $dec -= $s * 256**$i}
  $ip  =~ s/\\.+$//g;
  return ($ip);
}