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

Excel中用VBA通过SNMP采集交换机数据:OCTET类型转换难题

解决VBA中SNMP OCTET类型数据转换问题

问题根源

OCTET STRING类型的SNMP数据本质是原始字节序列,OlePrn.OleSNMP的GetTree方法会将其按Unicode字符串解析,导致出现乱码(比如示例中的"€")。需要手动将这些字符串转回字节数组,再根据实际需求解析。

转换方案

1. 字符串转字节数组函数

先编写一个VBA函数,把返回的乱码字符串转换成原始字节数组:

Function StringToByteArray(str As String) As Byte()
    Dim byteArr() As Byte
    Dim i As Integer
    ReDim byteArr(Len(str) - 1)
    
    For i = 1 To Len(str)
        byteArr(i - 1) = AscB(Mid(str, i, 1))
    Next i
    
    StringToByteArray = byteArr
End Function

2. 处理GetTree返回的表格数据

遍历portsRBID二维数组,逐个转换元素:

Set objSNMP = CreateObject("OlePrn.OleSNMP")
objSNMP.Open "192.168.110.250", "public", 2, 1000
portsRBID = objSNMP.GetTree(".1.3.6.1.4.1.248.12.1.2.15.11.1.250")

Dim rowCount As Integer, colCount As Integer
Dim byteData() As Byte
Dim i As Integer, j As Integer

rowCount = UBound(portsRBID, 1)
colCount = UBound(portsRBID, 2)

' 遍历每个元素转换并输出
For i = 1 To rowCount
    For j = 0 To colCount
        If VarType(portsRBID(i, j)) = vbString Then
            byteData = StringToByteArray(portsRBID(i, j))
            ' 可根据需求处理字节数组,比如转十六进制
            Debug.Print "portsRBID(" & i & "," & j & ") 原始字节: " & ByteArrayToHex(byteData)
        End If
    Next j
Next i

3. 字节数组转十六进制(可选)

如果需要将字节数组转为可读性更强的十六进制字符串,添加以下函数:

Function ByteArrayToHex(byteArr() As Byte) As String
    Dim hexStr As String
    Dim i As Integer
    
    hexStr = ""
    For i = LBound(byteArr) To UBound(byteArr)
        hexStr = hexStr & Right("0" & Hex(byteArr(i)), 2) & " "
    Next i
    
    ByteArrayToHex = Trim(hexStr)
End Function

关于GetAsByte和单个OID报错的说明

  • GetAsByte方法仅支持单个OID查询,无法用于返回多个节点的表格类OID,因此调用时会报错。
  • 指定单个元素时OID报错,大概率是OID格式错误:表格类OID的索引部分不需要加.0,比如正确的单个元素OID应为.1.3.6.1.4.1.248.12.1.2.15.11.1.250.3(假设索引为3),而非.1.3.6.1.4.1.248.12.1.2.15.11.1.250.0.3。可先通过MIB浏览器确认设备上实际存在的OID节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:17:12