查看: 2219|回复: 0

ASN.1的BER编码的一个问题!!!

[复制链接]
发表于 2008-1-28 10:37:30 | 显示全部楼层 |阅读模式
小弟在看天君Blog里的SNMP的学习笔记时遇到问题:

5.3.2   对象标识ObjectID编码
SNMP服务器维护的所有管理信息库(MIB)对象采用ObjectID表示,如,1.3.6.1.2.1.1.1表示MIB库中的设备描述SysDesc变量,其编码规则如下:

objectID::=0x06       length     {subidentifier}*        (1)
subidentifier::=   {leadingbyte}*   lastbyte           (2)
leadingbyte::=1   7bitvalue                               (3)
lastbyte::=0   7bitvalue                                     (4)
首两个ID被合并为一个字节X*40+Y               (5)

虽然规则很多,但由于大多数子对象标识在0~127,只需按规则(1)、(5)即可;当子对象标识大于127,则按规则(2)、(3)、(4)将其分解为多个字节,最后一个字节的高位为零,其余字节的高位为一。如:1.3.6.1.810.1,根据规则(5),首两个子对象标识1.3被合并为2B(1   3   40+3=43);子对象标识810超过127,根据规则(2)、(3)、(4)将其拆分为两个字节86   2A   (810=11   0010   1010==> 1000     0110     0010     1010);整个MIB被编码为:0x06   0x06   0x2b   0x06   0x010x86   0x2a   0x01。


     完全想不通为什么810最后会编成以86开头的编码862A,2A没变,可剩下的11是怎么变成1000   0110的?为什么不是1000   0011呢?规则里只说leadingbyte加1啊?!还有840也是变成8648,难道这些大点的数都固定以86开头,而只保留原来末尾一个字节吗???!
    强烈盼望牛人解答!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表