Snmp 如何对大OID值进行编码和解码?

Snmp 如何对大OID值进行编码和解码?,snmp,Snmp,我的OID为1.3.6.1.2.1.2.2.1.8.4096(iOperationStatus) 在我的代码中,我有: MIB[0]=0x2b MIB[1]=0x06 MIB[2]=0x01 MIB[3]=0x02 MIB[4]=0x01 MIB[5]=0x02 MIB[6]=0x02 MIB[7]=0x01 MIB[8]=0x08 MIB[9]=0xA0 MIB[10]=0x00 其中A000表示4096 4096十六进制是1000。 把它分成两个字节会给我10000。 SNMP数据

我的OID为1.3.6.1.2.1.2.2.1.8.4096(iOperationStatus)

在我的代码中,我有:

MIB[0]=0x2b
MIB[1]=0x06
MIB[2]=0x01
MIB[3]=0x02
MIB[4]=0x01
MIB[5]=0x02    
MIB[6]=0x02
MIB[7]=0x01
MIB[8]=0x08
MIB[9]=0xA0
MIB[10]=0x00
其中A000表示4096

4096十六进制是1000。 把它分成两个字节会给我10000。 SNMP数据应以单字节格式发送。 因此,对于大数字需要一个特殊规则,因为一个字节(八位)只能表示0-255之间的数字。规则是将最高阶位用作标志,让收件人知道此数字跨越多个字节

我已将位向左移位,并将1添加到第8位

左移:20 00
位8变为1:A000

参考: [OID编码]()

我对4096的编码正确吗

如何将数据字符串解码为原始OID


示例有助于我理解这个概念。

是的,您已经正确地编码了OID(就内容而言)。完整编码(带OID和长度标签,省略了)将是06 0b 2b 06 01 02 01 08 a0 00

关于OID中字符串的编码/解码(可能是索引),规则取决于所讨论的值是否用于定义为固定长度或可变长度字符串的对象,以及是否在定义索引时使用了隐含关键字

如果它是一个固定长度的字符串,或者是带有隐含关键字的可变长度字符串(必须是最后一个索引对象),那么它被简单地编码为字符串每个字节的一个子标识符。否则,将使用一个子标识符对可变长度字符串进行编码,以指示字符串的长度,然后使用固定长度在单个子标识符中对每个字节进行编码

RFC2578第7.7节详细介绍了OID中索引对象值的编码规则