Listing 1

 protected string VbToString(ref SMIVALUE sval)
{
    string    val = "";

    //
    //  Convert all types to a string value
    //
    switch (sval.type) {
        //
        //  Standard 32 bit integer conversion
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_INT:
            val = sval.val.sNumber.ToString();
            break;

        //
        //  Standard 32 bit unsigned integer conversion
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_UINT32:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_CNTR32:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_GAUGE32:
            val = sval.val.uNumber.ToString();
            break;

        //
        //  Timeticks are in hundredths of a second (.01).  We need to mul-
		//  tiply by ten to send ms (.001) to TimeSpan.
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_TIMETICKS:
        val = TimeSpan.FromMilliseconds((long)sval.val.uNumber*10)
        .ToString();
            val = val.Substring(0, val.Length-4);
            break;

        //
        //  Standard 64 bit integer conversion
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_CNTR64:
            val = sval.val.hNumber.ToString();
            break;

        //
        //  Byte array conversion.  SNMP doesn't differentiate between
        //  ASCII and binary data, so we perform a check ourselves and
        //  convert binary data to ASCII (using ToBase64String, which is
		//  uuencode).
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_BITS:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_OPAQUE:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_OCTETS:
            if (sval.val.str.size > 0) {
                int i = 0;
                byte[] bits = new byte[sval.val.str.size];

                Marshal.Copy(sval.val.str.octets, bits, 0,
                (int)sval.val.str.size);

                for (i = 0; i < bits.Length; i++) {
                    if (char.IsControl((char)bits[i]) &&
					(i < bits.Length-1 || bits[i] != 0)) {
                        val = Convert.ToBase64String(bits, 0, bits.Length);
                        break;
                    }
                }
                if (i == bits.Length)
                    val = Marshal.PtrToStringAnsi(sval.val.str.octets,
                    (int)sval.val.str.size);

                SnmpAPI.SnmpFreeDescriptor
				((int)sval.type, ref sval.val.str);
            }
            break;

        //
        //  Ip Address conversion
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_NSAPADDR:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_IPADDR:
            IPAddress addr = new IPAddress((long)(UInt32)Marshal
            .ReadIntPtr(sval.val.str.octets));
            val = addr.ToString();
            SnmpAPI.SnmpFreeDescriptor((int)sval.type, ref sval.val.str);
            break;

        //
        //  SNMP OID conversion
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_OID:
            val = OidToString(ref sval.val.oid);
            break;

        //
        //  Catch the rest
        //
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_NULL:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_NOSUCHOBJECT:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_NOSUCHINSTANCE:
        case SNMPAPI_SYNTAX.SNMP_SYNTAX_ENDOFMIBVIEW:
            val = "(null)";
            break;
    }
    return(val);
}

Additional Code for this Article zip file ~146 KB