Forum Webscript.Ru
Программирование => Perl => Тема начата: GunJah от 16 Июня 2005, 17:05:36
-
Доброго времени суток
:cool:
Вопросик по модулю:
Если некое поле (IP) типа OCTET_STRING, как с помощью вышеуказанного модуля впихнуть туды ай-пишник (к примеру вида: 0.0.0.0), чтоб в самом конфиге он выглядел как 4 байта (ту бишь: 30 30 30 30) ?
Заранее пааасибо :)
-
Небольшое добавление:
С помощью сего модуля пишется интерфейс к конфигурационному файлу в формате ASN-1
Ту бишь сначала парсится этот конфиг в хэш, а потом обратно уже с новыми данными... И не получается впихнуть уже в исходный файл ай-пишник, чтоб он выглядел как 4 байта...
-
А может Вам нужно сначала ИП просто запаковать?
-
Проблема в том, что при присвоении значения полю IP он воспринимается как строка, ту биш 1 байт на 1 символ, а нужно, чтоб воспринимался как 4 байта :(
-
Я еще начинающий программист и не научился пока применять функции 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);
}
-
Помогите пожалуйста преобразовать IP к примеру вида:
127.0.0.1
в 4 байта вида:
0x7F 0x00 0x00 0x01
Наверняка уже кому-нить приходилось подобное делать. Help PLEASE =]
-
Если я вас правильно понял, то это то что тебе надо, только праверок на правильность нет:
sub ip_to_hex {
return join \' \', map {\'0x\' . sprintf("%02lX", $_)} split /\\./, shift;
};
print ip_to_hex(\'127.0.0.1\');
-
use Socket;
my $ip = \'127.0.0.1\';
print inet_aton($ip);
-
2 Green Kakadu
Спасибо огромное ! Помогло !
А как теперь обратно из бинарика в IP ?
-
Sorry, тулю... Уже нашел.
inet_ntoa($_);
Всем ОГРОМНОЕ СПАСИБО !!!
:-)