什么是通过SNMP显示浮点数的好方法?

问题描述:

我正在编码SNMP代理。我需要将具有小数点的值发送到SNMP管理器。什么是通过SNMP显示浮点数的好方法?

我有几个选择:

  1. 截断数。
  2. 乘以常数。
  3. 询问*。

如果我截断数字,则会丢失大量我需要的信息。

如果我乘以一个常数,那么经理将显示最终用户不希望看到的奇怪单位。 (克而不是千克)。

所以,我正在做选项3.我该怎么做?

完成此操作的通常方法是使用整数类型(例如Integer32或Unsigned32)和带“dN”格式的DISPLAY-HINT定义TEXTUAL-CONVENTION,其中N是为了显示目的,应将小数位移位。因此,对于一个小数点后一位数(从0.0到10.0)的值,可以使用Unsigned32(0..100)类型的TEXTUAL-CONVENTION和DISPLAY-HINT的“d-1” 。在连线上,取值范围为0到100,但管理器(通过加载的MIB模块)会将小数点位置移动以显示范围0.0到10.0。

其他的做法不利于互操作性。

作为IEEE-754格式(8个八位字节)的八位字节流。请参阅:http://en.wikipedia.org/wiki/IEEE_754-2008

+1

这实际上是FLOAT-TC-MIB中的表示之一。此mib在http://tools.ietf.org/html/rfc6340中进行了描述,并于2011年发布。 – goertzenator 2014-03-11 13:58:10

我宁愿通过OCTET STRING/DisplayString发送数据。诸如“1.5”的数字可以很容易地发送。但是,如果数据需要准确,您可以通过发送字节(八位位组)来使用凯尔的建议。值得注意的是,这也是通过OCTET STRING发送的,因为它是一个完美的字节容器。

+0

发送测试表示的问题在于SNMP管理器无法对该数据进行任何计算。 – Robert 2010-01-29 12:01:31