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

如何编码大于32768的SNMP OID数字?我的BER编码是否正确?

关于大OID数字的BER编码正确性确认

你的编码方式完全正确,完全符合BER(基本编码规则)对OID中大于127的数字的编码规范。

关键编码规则

BER对OID数字采用可变长度字节编码,核心规则:

  • 每个字节的最高位为延续标记:值为1时,表示后续还有字节属于当前数字;值为0时,表示这是当前数字的最后一个字节。
  • 每个字节的低7位是有效数据位,将这些数据位按顺序拼接后即可还原原始数字。

你的编码验证拆解

你编码的第7个OID数字33500对应的字节是0x82、0x85、0x5c,计算逻辑完全正确:

  1. 提取各字节的低7位有效数据:
    • 0x82去掉最高位后为十进制2
    • 0x85去掉最高位后为十进制5
    • 0x5c去掉最高位后为十进制92(即十六进制0x5c)
  2. 按权重拼接计算:2 * 128² + 5 * 128 + 92 = 32768 + 640 + 92 = 33500,与原始数字完全一致。

多字节编码的设计目的

BER采用这种可变长度编码是为了节省空间:

  • 对于小于128的数字,仅需1个字节(最高位设为0)即可表示;
  • 对于大于等于128的数字,需要拆分到多个字节,中间字节最高位设1,最后一个字节最高位设0。33500远大于128,因此需要3个字节编码,你的实现完全符合该规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:48:34