You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解码SNMP返回的OctetString格式打印机安装日期?

解码SNMP OID .1.3.6.1.4.1.641.6.2.3.1.7.1的日期值

这个OID返回的OctetString是变种的ASN.1 GeneralizedTime格式,前7个字节依次对应年(2字节)、月、日、时、分、秒,后续为保留字段。针对你提供的十六进制值07 DF 06 14 0D 30 0E 00 00 00 00 00,解码步骤如下:

解码逻辑

  1. 年份:前2字节07 DF转十进制为0x07DF = 7*256 + 223 = 2015
  2. 月份:第3字节06转十进制为6
  3. 日期:第4字节14转十进制为20
  4. 时间(可选):第5-7字节0D 30 0E分别对应13时、48分、14秒

修改后的VBA解码代码

Set objSNMP = CreateObject("OlePrn.OleSNMP")
objSNMP.Open "10.158.110.8", "public", 2, 10000

' 获取原始二进制字符串
Dim rawData As String
rawData = objSNMP.get(".1.3.6.1.4.1.641.6.2.3.1.7.1")

' 转换为字节数组(解决乱码问题)
Dim bytes() As Byte
bytes = StrConv(rawData, vbFromUnicode)

' 解析核心日期字段
Dim printYear As Integer, printMonth As Integer, printDay As Integer
printYear = (bytes(0) * 256) + bytes(1)
printMonth = bytes(2)
printDay = bytes(3)

' 输出格式化日期(与网页显示一致)
Debug.Print printYear & "-" & Format(printMonth, "00") & "-" & Format(printDay, "00")

' 可选:解析并输出完整时间
Dim printHour As Integer, printMinute As Integer, printSecond As Integer
printHour = bytes(4)
printMinute = bytes(5)
printSecond = bytes(6)
Debug.Print printYear & "-" & Format(printMonth, "00") & "-" & Format(printDay, "00") & " " & _
            Format(printHour, "00") & ":" & Format(printMinute, "00") & ":" & Format(printSecond, "00")

说明

  • 直接Debug.Print返回乱码是因为OlePrn.OleSNMP返回的是二进制字符串,而非可打印文本,必须转成字节数组才能解析。
  • 后续的00字节为保留或时区字段,不影响日期解析。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:43:10