2010-01-26 60 views
7

我正在編碼SNMP代理。我需要將具有小數點的值發送到SNMP管理器。什麼是通過SNMP顯示浮點數的好方法?

我有幾個選擇:

  1. 截斷數。
  2. 乘以常數。
  3. 詢問Stackoverflow。

如果我截斷數字,則會丟失大量我需要的信息。

如果我乘以一個常數,那麼經理將顯示最終用戶不希望看到的奇怪單位。 (克而不是千克)。

所以,我正在做選項3.我該怎麼做?

回答

11

完成此操作的通常方法是使用整數類型(例如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。

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

2

作爲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

1

我寧願通過OCTET STRING/DisplayString發送數據。諸如「1.5」的數字可以很容易地發送。但是,如果數據需要準確,您可以通過發送字節(八位位組)來使用凱爾的建議。值得注意的是,這也是通過OCTET STRING發送的,因爲它是一個完美的字節容器。

+0

發送測試表示的問題在於SNMP管理器無法對該數據進行任何計算。 – Robert 2010-01-29 12:01:31

相關問題