SnmpSharpNet OctetString DateAndTime自定义解析

在进行有关Snmpsharpnet的编程时遇到一个问题,当OctetString向时间转换时产生的是乱码。是因为snmpsharpnet并没有定义OctetString向datetime转换的函数。经过笔者的学习与实践找到了解决的办法。接下来以获得计算机上已安装程序的安装时间为例:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using SnmpSharpNet;//需要添加引用
namespace 时间乱码问题
{
    class Program
    {
        static void Main(string[] args)
        {
            SimpleSnmp snmp = new SimpleSnmp("127.0.0.1", "public");

            if (!snmp.Valid)
            {

                return;
            }
            Dictionary<Oid, AsnType> result = snmp.Walk(SnmpVersion.Ver2, ".1.3.6.1.2.1.25.6.3.1.5");//程序安装时间
            
            if (result == null)
            {

                return;
            }

            foreach (KeyValuePair<Oid, AsnType> kvp in result)
            {
                //Console.WriteLine(kvp.Value.ToString());      //如果是执行这一句就会发现是乱码结果
                Console.WriteLine(parseDateAndTimeOctet((OctetString)kvp.Value));                
            }
        }
        public static String parseDateAndTimeOctet( OctetString v )
        {


            
            //OctetString
           
            byte[] bts = v.ToArray();
            
            byte[] format_str = new byte[128];   //保存格式化过后的时间字符串

            int year;

            int month;

            int day;

            int hour;

            int minute;

            int second;

            //int msecond;      
            year =year = bts[0] * 256  + bts[1];
            month = bts[2];
            day = bts[3];
            hour = bts[4];
            minute = bts[5];
            second = bts[6];
            //msecond = bts[7];
            //以下为格式化字符串
            int index = 3;
            int temp = year;

            for (; index >= 0; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));
                temp /= 10;
            }

            format_str[4] = (Byte)'-';
            index = 6;
            temp = month;
            for (; index >= 5; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));
                temp /= 10;
            }

            format_str[7] = (Byte)'-';
            index = 9;
            temp = day;
            for (; index >= 8; index--)
            {

                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));

                temp /= 10;

            }
            format_str[10] = (Byte)' ';
            index = 12;
            temp = hour;
            for (; index >= 11; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));
                temp /= 10;
            }

            format_str[13] = (Byte)':';
            index = 15;
            temp = minute;
            for (; index >= 14; index--)
            {

                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));

                temp /= 10;

            }

            format_str[16] = (Byte)':';
            index = 18;
            temp = second;
            for (; index >= 17; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));

                temp /= 10;

            }

            //int i = 6;
            //while (i >= 0)
            //{
            //    Console.WriteLine("{0}", bts[i]);
            //    i--;
            //}

            return System.Text.Encoding.Default.GetString(format_str);// new String(format_str);

        }
    }
}

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值