Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Декодировка counter64 (SNMP), Алгоритм функции 
:(
    Опции темы
MasterErik
Дата 10.5.2011, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.5.2011

Репутация: нет
Всего: нет



Я хочу понять как работает алгоритм следующей функции.
Код

sub encode_counter64 ($) {
    return encode_intlike ($_[0], snmp_counter64_tag);
} 

sub encode_intlike ($$) {
    my ($int, $tag)=@_;
    my ($sign, $val, @vals);
    $sign = ($int >= 0) ? 0 : 0xff;
    if (ref $int && $int->isa ("Math::BigInt")) {
    for(;;) {
        $val = $int->copy()->bmod (256);
        unshift(@vals, $val);
        return encode_header ($tag, $#vals + 1).pack ("C*", @vals)
        if ($int >= -128 && $int < 128);
        $int->bsub ($sign)->bdiv (256);
    }
    } else {
    for(;;) {
        $val = $int & 0xff;
        unshift(@vals, $val);
        return encode_header ($tag, $#vals + 1).pack ("C*", @vals)
        if ($int >= -128 && $int < 128);
        $int -= $sign, $int = int($int / 256);
    }
    }
} 

К сожалению я не знаю Perl, но предполагаю что при вызове encode_counter64 срабатывает if на BigInt. Но совершенно не понимаю, что делает $val = $int->copy()->bmod (256); и $int->bsub ($sign)->bdiv (256); В общем мне нужен алгоритм этой маленькой функции, чтобы перенести ее на другой язык.


M
JackYF
Пользуемся кнопкой "код".

PM MAIL   Вверх
Pfailed
Дата 10.5.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Код

if (ref $int && $int->isa ("Math::BigInt")) {


Это означает, что $int является объектом класса Math::BigInt.  А чтобы узнать что делают указанные методы читайте документацию по Math::BigInt: http://search.cpan.org/perldoc?Math::BigInt


--------------------
PM MAIL   Вверх
MasterErik
Дата 10.5.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.5.2011

Репутация: нет
Всего: нет



Я посмотрел вашу ссылку, но осталось много непонятного. Может кто уже работал с этим классом и прокомментирует что делает эта строчка.  $val = $int->copy()->bmod (256); Где входной параметр для функции? Предположу, что он как-то оказался в $int? Тогда мы копируем $int и берем Остаток от деления $int на 256? В общем без опыта программирования на Perl я могу только предполагать.  А мне нужен точный алгоритм. Если кто может написать подробный комментарий для каждой строчки или описать алгоритм, то буду очень благодарен.
PM MAIL   Вверх
Pfailed
Дата 10.5.2011, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Да он в $int. И оказался он там не случайно. man Объектно Ориентированное Программирование


--------------------
PM MAIL   Вверх
arto
Дата 10.5.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



может легче прочитать описание: http://www.webnms.com/snmp/help/snmpapi/sn...lns/cntr64.html ?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1235 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.