Каков хороший способ показать число с плавающей запятой через SNMP?

Я кодирую агент SNMP. Мне нужно отправить значения с десятичной точкой диспетчеру SNMP.

У меня есть пара вариантов:

  1. Сократите число.
  2. Умножить на константу.
  3. Спросите Stackoverflow.

Если я урежу число, я потеряю много информации, которая мне нужна.

Если я умножу на константу, то менеджер будет отображать странные единицы измерения, которые конечный пользователь предпочел бы не видеть. (граммы вместо килограммов).

Итак, я делаю вариант 3. Что мне делать?


person Robert    schedule 26.01.2010    source источник


Ответы (3)


Обычный, стандартный способ сделать это состоит в том, чтобы определить TEXTUAL-CONVENTION с целым типом (например, Integer32 или Unsigned32) и DISPLAY-HINT с форматом «dN», где N — количество разрядов, на которое следует сдвинуть десятичную запятую. дисплейные цели.

Таким образом, для значения с одним десятичным знаком в диапазоне, скажем, от 0,0 до 10,0, вы должны использовать TEXTUAL-CONVENTION типа Unsigned32(0..100) и DISPLAY-HINT "d-1". На проводе значение находится в диапазоне от 0 до 100, но менеджер (путем загрузки модуля MIB) сдвинет десятичную дробь на один разряд, чтобы отобразить диапазон от 0,0 до 10,0.

Другие способы сделать это не способствуют интероперабельности.

person Michael Kirkham    schedule 27.01.2010

как поток октетов в формате IEEE-754 (8 октетов). См.: http://en.wikipedia.org/wiki/IEEE_754-2008

person Kyle Butt    schedule 26.01.2010
comment
На самом деле это одно из представлений в FLOAT-TC-MIB. Этот mib описан в tools.ietf.org/html/rfc6340 и был выпущен в 2011 году. . - person goertzenator; 11.03.2014

Я скорее отправляю эти данные через OCTET STRING/DisplayString. Такие числа, как «1,5», можно легко отправить.

Однако, если данные должны быть точными, вы можете воспользоваться предложением Кайла, отправив байты (октеты). Примечательно, что это также отправляется через OCTET STRING, поскольку это идеальный контейнер байтов.

person Lex Li    schedule 29.01.2010
comment
Моя проблема с отправкой тестового представления заключается в том, что диспетчер SNMP не может выполнять какие-либо вычисления с этими данными. - person Robert; 29.01.2010