我正在编写一个 SNMP 代理。我需要将带有小数点的值发送到 SNMP 管理器。
我有几个选择:
- 截断数字。
- 乘以一个常数。
- 问 Stackoverflow。
如果我截断数字,我会丢失很多我需要的信息。
如果我乘以一个常数,那么管理器将显示最终用户不愿看到的奇怪单位。(克而不是公斤)。
所以,我在做选项 3。我该怎么办?
我正在编写一个 SNMP 代理。我需要将带有小数点的值发送到 SNMP 管理器。
我有几个选择:
如果我截断数字,我会丢失很多我需要的信息。
如果我乘以一个常数,那么管理器将显示最终用户不愿看到的奇怪单位。(克而不是公斤)。
所以,我在做选项 3。我该怎么办?
通常的标准方法是定义一个具有整数类型(例如 Integer32 或 Unsigned32)的 TEXTUAL-CONVENTION 和一个具有“dN”格式的 DISPLAY-HINT,其中 N 是小数应移动的位数显示目的。
因此,对于具有单个小数位(例如)0.0 到 10.0 的值,您将使用 Unsigned32(0..100) 类型的 TEXTUAL-CONVENTION 和“d-1”的 DISPLAY-HINT。在线上,值的范围是 0 到 100,但管理器(通过加载的 MIB 模块)会将小数位移动一位以显示 0.0 到 10.0 的范围。
其他方式不利于互操作性。
作为 IEEE-754 格式(8 个八位字节)的八位字节流。见:http ://en.wikipedia.org/wiki/IEEE_754-2008
我宁愿通过 OCTET STRING/DisplayString 发送该数据。可以轻松发送诸如“1.5”之类的数字。
但是,如果数据需要准确,您可以通过发送字节(八位字节)来使用 Kyle 的建议。值得注意的是,它也是通过 OCTET STRING 发送的,因为它是一个完美的字节容器。