SNMP_PP_CHS Charpter 8 - 9

来源:互联网 发布:linux设置系统时间 编辑:程序博客网 时间:2024/05/22 04:45

1.         OctetStr Class

SNMP++OctetStr Class的对象模型(Object Modeling Technique)视图

1.1.        八位字节类

(通过)SNMP++Octet class,可以简单且安全地操作SMI8位字节。有了Octet class,就不需要通过内部指针和长度来操作8位字节了。使用SNMP++Octet class来实例化、操作、销毁一个8位字节对象是很简单的,不用担心如何管理内存以及内存是否会泄漏。与ANSI C++string class类似,OctetStr class可以通过多种方法构造8位字节,还可以对它们进行赋值操作,与其他SNMP++ classes一起使用。

1.2.        OctetStr Class的成员函数列表

OctetStr Class Member Functions

Description

Constructors

 

     OctetStr::OctetStr( void);

构造一个空的OctetStr

     OctetStr::OctetStr( const char* string);

用一个没有结束符的字符串构造OctetStr

     OctetStr::OctetStr( const unsigned char *s, unsigned long int i);

通过一个指针和长度来构造OctetStr

     OctetStr::OctetStr( const OctetStr &octet);

用已有的OctetStr构造新的OctetStr

Destructor

 

     OctetStr::~OctetStr( );

销毁一个OctetStr

Overloaded Operators

 

     OctetStr& operator = ( const char *string);   

将一个没有结束符的字符串付给一个OctetStr

     OctetStr& operator = ( const OctetStr& octet);

将一个OctetStr付给另一个OctetStr

     int operator == ( const OctetStr &lhs, const OctetStr &rhs);

判断两个OctetStr对象是否相等

     int operator == ( const OctetStr & lhs, const char *string);

判断OctetStr是否和一个char*字符串相等

     int operator != ( const OctetStr& lhs, const OctetStr& rhs);

判断两个OctetStr对象是否不相等

     int operator != ( const OctetStr& lhs, const char *string);

判断OctetStr是否和一个char*字符串不相等

     int operator < ( const OctetStr&lhs, const OctetStr& rhs);

判断一个OctetStr是否比另一个小

     int operator < ( const OctetStr &lhs, const char * string);

判断一个OctetStr是否比另一个char *字符串小

     int operator <= ( const OctetStr &lhs, const OctetStr &rhs);

判断一个OctetStr是否小于等于另一个

     int operator <= ( const OctetStr &lhs, const char * string);

判断一个OctetStr是否小于等于一个char *的字符串

     int operator > ( const OctetStr& lhs, const OctetStr &rhs);

判断一个OctetStr是否比另一个大

     int operator > ( const OctetStr& lhs, const char * string);

Test if one OctetStr is greater than a char *.

判断一个OctetStr是否比一个char *的字符串大

     int operator >= ( const OctetStr& lhs, const OctetStr &rhs);

判断一个OctetStr是否大于等于另一个

     int operator >= ( const OctetStr& lhs, const char *);

判断一个OctetStr是否大于等于一个char*的字符串

    OctetStr& operator +=( const char * string);

在一个OctetStr后面连接一个字符串

    OctetStr& operator +=( const unsigned char c);

在一个OctetStr后面连接一个单字符

    OctetStr& operator+=( const OctetStr &octetstr);

将两个OctetStr连接在一起

    unsigned char& operator[ ] ( int position i);

用数组的形式来访问一个OctetStr

Miscellaneous 

 

     void set_data( const unsigned char *s, unsigned long l);

用指针和长度来设置一个OctetStr

     int nCompare( const unsigned long n, const OctetStr &o);

与另一个OctetStr比较前n个元素

     unsigned long len();

返回一个OctetStr的长度

     int valid();

返回一个OctetStr的有效性

     unsigned char * data();

返回一个指向内部数据的指针

     char * get_printable();

格式化输出,如果不是ASCII则按16进制处理

     char * get_printable_hex();

16进制格式,进行格式化输出

1.3.        注意

当输出一个OctetStr对象时,如果该8位字节所包含的字符不是ASCII码,对成员函数char *或者get_printable()的调用,就会自动转换成对成员函数get_printable_hex()的调用。这就使得使用者只需要简单地使用成员函数char *get_printable()来进行输出。而成员函数get_printable_hex()是专门用来把OctetStr16进制格式输出的。

1.4.        一些OctetStr Class的例子

// Octet Class Examples

#include “octet.h”

void octet_example()

{

   OctetStr octet1;    // create an invalid un- initialized octet object

   OctetStr octet2( “Red Hook Extra Bitter Ale”);      // create an octet with a string

   OctetStr octet3( octet2);    // create an octet with another octet

   unsigned char raw_data[50];    // create some raw data

   OctetStr octet4( raw_data, 50);    // create an OctetStr using unsigned char data

  

   octet1 = “Sierra Nevada Pale Ale”;    // assign one octet to another

   cout << octet1.get_printable();    // show octet1 as a null terminated string

   cout << octet4.get_printable_hex();    // show octet4 as a hex string

   cout << (char *) octet1;    // same as get_printable()

   if ( octet1 == octet2)    // compare two octets

      cout << “octet1 is equal to octet2”;

 

   octet2 += “WinterFest Ale”;    // concat a string to an Octet

   if ( octet2 >= octet3)

      cout << “octet2 greater than or equal to octet2”;

 

   octet2[4] = ‘b’;    // modify an element of an OctetStr using [ ]’s

 

   cout << octet.len();    // print out the length of an OctetStr

 

   unsigned char raw_data[100];

   octet1.set_data( raw_data, 100);    // set the data of an to unsigned char data

 

   // get the validity of an OctetStr

   cout << (octet1.valid() )? “Octet1 is valid” : “Octet1 is Invalid”;

 

};  // end octet example

 

2.         TimeTicks Class

SNMP++TimeTicks Class的对象模型(Object Modeling Technique)视图


2.1.        时间戳类

SNMP++TimeTicks Class为(使用)SMI中的timeticks带来了方便。SMI的时间戳被定义成了一种存放无符号长整形的存储单元。为了成为无符号长整形,SMI timeticks被加工成了一种特殊的类型。因此SNMP++TimeTicks类具有无符号长整形的所有功能和属性,但同时又是一个独立的类。对无符号长整形的任何操作,拿到TimeTicks的对象上一样有效。TimeTicks class与其他SNMP++的类,比如Vb class(译注:后面将会讲到)交互的时候,还可以有些额外的操作:在使用Vb class的时候,TimeTicks的对象可以被置入Vb对象(用Vb::set),也从Vb对象中取出(用Vb::get)。也即,对于SMI timeticks,开发者可以像对无符号长整形一样来操作,并且还提供了一对一的映射关系。

2.2.        TimeTicks Class的成员函数列表

TimeTicks Class Member Functions

Description

Constructors

 

     TimeTicks::TimeTicks( void);

构造一个空的TimeTicks对象

     TimeTicks::TimeTicks( const unsigned long i );

用一个无符号长整形来构造一个TimeTicks对象

     TimeTicks:;TimeTicks(  const TimeTicks &t);

用一个已有的TimeTicks对象来构造一个新的

Destructor 

 

     TimeTicks::~TimeTicks( );

销毁一个TimeTicks对象

Overloaded Operators

 

      TimeTicks& operator =( const TimeTicks &t);

重载赋值操作符

      char * get_printable();

格式化输出,格式为:DD Days, HH:MM:SS.hh

      operator unsigned long();

TimeTicks转换为无符号长整形

2.3.        注意

TimeTicks对象用TimeTicks::get_printable()输出时,其值自动被格式化为“DD days, HH:MM:SS.hh”。其中DD代表天,HH代表小时(24时制的),MM代表分钟,SS是秒钟,hh则是百分之几秒。

2.4.        一些TimeTicks Class的例子

// TimeTicks Examples

#include “timetick.h”

void timeticks_example()

{

    TimeTicks tt;    // create an un-initialized timeticks instance

    TimeTicks tt1( (unsigned long) 57);    // create a timeticks using a number

    TimeTicks tt2( tt1);    // create a timeticks using another instance

 

    tt = 192;    // overloaded assignment to a number

    tt2 = tt;    // overloaded assignment to another timeticks

 

    cout << tt.get_printable();    // print out in DD days, HH:MM:SS.hh

    cout << ( unsigned long) tt;    // print out unsigned long int value

 

};  // end timeticks example