2010-01-26 22 views
7

Estoy codificando un agente SNMP. Necesito enviar valores que tengan un punto decimal a un Administrador de SNMP.¿Cuál es una buena forma de mostrar un número de coma flotante a través de SNMP?

Tengo un par de opciones:

  1. truncar el número.
  2. Multiplicar por una constante.
  3. Pregunta a Stackoverflow.

Si trunco ​​el número, pierdo mucha información que necesito.

Si multiplico por una constante, el administrador mostrará unidades extrañas que el usuario final preferiría no ver. (gramos en lugar de kilogramos).

Por lo tanto, estoy haciendo la opción 3. ¿Qué debo hacer?

Respuesta

11

La forma habitual y estándar de hacerlo es definir un TEXTUAL-CONVENTION con un tipo integral (como Integer32 o Unsigned32) y un DISPLAY-HINT con formato "dN", donde N es el número de coloca el decimal debe desplazarse para fines de visualización.

Por lo tanto, para un valor con un solo lugar decimal que va desde (digamos) 0.0 a 10.0, usaría un TEXTUAL-CONVENTION del tipo Unsigned32 (0..100) y un DISPLAY-HINT de "d-1" . En el cable, el valor varía de 0 a 100, pero el administrador (a través del módulo MIB que se está cargando) cambiará el lugar decimal para mostrar un rango de 0.0 a 10.0.

Otras formas de hacerlo no conducen a la interoperabilidad.

1

Prefiero enviar esa información a través de OCTET STRING/DisplayString. Los números como "1.5" se pueden enviar fácilmente.

Sin embargo, si los datos deben ser precisos, puede usar la sugerencia de Kyle enviando bytes (octetos). Cabe destacar que también se envía a través de OCTET STRING, ya que es un contenedor de bytes perfecto.

+0

Mi preocupación de enviar la representación de prueba es que el Administrador de SNMP no puede hacer ningún cálculo con esa información. – Robert

Cuestiones relacionadas