如何通过SNMP展示浮点数?有什么好方法?

10

我正在编写一个SNMP代理程序。我需要将带小数点的值发送给SNMP管理器。

我有几个选项:

  1. 截断数字。
  2. 乘以一个常数。
  3. 向Stackoverflow求助。

如果我截断数字,我会失去很多我需要的信息。

如果我乘以一个常数,那么管理器将显示奇怪的单位,而最终用户不愿意看到这些单位(如克而不是千克)。

所以,我选择第三个选项。那我该怎么做呢?

3个回答

13
通常,标准的做法是使用整数类型(例如Integer32或Unsigned32)定义一个TEXTUAL-CONVENTION和" d-N "格式的DISPLAY-HINT,其中N是为了显示目的而应将小数点移动的位数。
因此,对于范围从(比如)0.0到10.0的具有单个小数位的值,您将使用Unsigned32(0..100)类型的TEXTUAL-CONVENTION和"d-1"的DISPLAY-HINT。在传输过程中,值的范围从0到100,但是通过MIB模块的加载,管理器将移动小数点一位以显示0.0到10.0的范围。
其他的做法不利于互操作性。

3

2
这实际上是FLOAT-TC-MIB中的一种表示。该MIB在http://tools.ietf.org/html/rfc6340中有描述,并于2011年发布。 - goertzenator

1

我更倾向于通过OCTET STRING/DisplayString发送数据。像“1.5”这样的数字可以轻松发送。

然而,如果数据需要准确,您可以使用Kyle的建议通过发送字节(八位组)来实现。显然,这也是通过OCTET STRING发送的,因为它是一个完美的字节容器。


我发送测试表示的担忧在于 SNMP 管理器无法对该数据进行任何计算。 - Robert Deml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接