package dmg.protocols.snmp ; /** * * * @author Patrick Fuhrmann * @version 0.1, 15 Feb 1998 */ public class SnmpInteger extends SnmpObject { private long _value ; public SnmpInteger( long value ){ _value = value ; } SnmpInteger( SnmpObjectHeader head , byte [] b , int offIn , int maxLen ) throws NumberFormatException { int off = offIn + head.getCodedLength() ; int len = head.getLength() ; if( len > 7 ) { throw new NumberFormatException("Integer(len)>7"); } int x ; for( int i = 0 ; i < len; i++ ){ x = b[off++] ; x = ( x < 0 ) ? ( x + 256 ) : x ; _value <<= 8 ; _value |= x ; } setCodedLength( head.getCodedLength() + len ) ; } public long longValue(){ return _value ; } public int intValue(){ return (int)_value ; } public String toString(){ return String.valueOf(_value); } @Override public byte [] getSnmpBytes(){ byte [] b = new byte[8] ; boolean started = false ; int off = 0 ; long y ; if( _value == 0 ) { b[off++] = (byte) 0; } else { for (int i = 7; i >= 0; i--) { y = (_value >> (i * 8)) & 0xFF; if ((!started) && (y == 0)) { } else { started = true; b[off++] = (byte) ((y > 127) ? (y - 256) : y); } } } SnmpObjectHeader head = new SnmpObjectHeader( SnmpObjectHeader.INTEGER , off ) ; int headLen = head.getCodedLength() ; byte [] out = new byte[headLen+off] ; System.arraycopy( head.getSnmpBytes() , 0 , out , 0 , headLen ) ; System.arraycopy( b , 0 , out , headLen , off ) ; return out ; } }