Числа (WMI)

В MOF числа — это цифры, описывающие числовые значения. MOF предоставляет различные типы данных, которые преобразуется в автоматизацию, а также позволяет использовать эти числа в разных форматах. В следующей таблице перечислены числовые значения, поддерживаемые MOF.

Тип данных Тип автоматизации Описание
sint8 VT_I2 8-разрядное целое число со знаком.
sint16 VT_I2 16-разрядное целое число со знаком.
sint32 VT_I4 32-разрядное целое число со знаком.
sint64 VT_BSTR 64-разрядное целое число со знаком в строковой форме. Этот тип соответствует шестнадцатеричным или десятичным форматам в соответствии с правилами C Американского национального института стандартов (ANSI).
real32 VT_R4 4-байтовое значение с плавающей запятой, которое соответствует стандарту IEEE.
real64 VT_R8 8-байтовое значение с плавающей запятой, которое соответствует стандарту IEEE.
uint8 VT_UI1 8-разрядное целое число без знака.
uint16 VT_I4 16-разрядное целое число без знака.
uint32 VT_I4 32-разрядное целое число без знака.
uint64 VT_BSTR 64-разрядное целое число без знака в строковой форме. Этот тип соответствует шестнадцатеричным или десятичным форматам в соответствии с правилами ANSI C.

Несмотря на гибкость, MOF-код все же сталкивается с некоторыми изменениями при работе с автоматизацией:

  • 64-разрядные целые числа необходимо кодировать как строки.

    Автоматизация не поддерживает 64-разрядный целочисленный тип.

  • Типы автоматизации не всегда соответствуют по размеру бита типам данных MOF.

    Например, служба автоматизации использует VT_I4 для возврата 16-разрядного значения без знака. Это несоответствие возникает из-за проблем с расширением знака. Если бы служба автоматизации использовала VT_I2 вместо VT_I4, 65 536 было бы значением 1, что приводит к проблемам с типом и диапазоном. Аналогичным образом служба автоматизации представляет тип uint32 как VT_I4 так как не существует большего целочисленного типа, который бы содержал uint32.

  • Не нужно изменять представление для 8-разрядных числовых типов.

    Служба автоматизации поддерживает VT_UI1 8-разрядного типа без знака.

MOF поддерживает длинные константы. Длинная константа объявляется с помощью простого ряда цифр с необязательным отрицательным знаком. Длинная константа не может превышать размер переменной, объявленной для хранения. Некоторые примеры длинных констант: 1000 и 12310.

MOF также поддерживает альтернативные числовые форматы. В следующей таблице перечислены специальные символы, которые необходимо использовать для описания шестнадцатеричных, двоичных и восьмеричной констант.

Константа Специальный символ Пример
Decimal
Нет
val = 65
Шестнадцатеричный
Префикс 0x
val = 0x41
Восьмеричное
В начале 0
val = 0101
Двоичные данные
Конечный B
val = 1000001B

Константу с плавающей запятой можно использовать для представления научной нотации, а также дробей, как показано ниже:

3.14
-3.14
-1.2778E+02

WMI рассматривает константы с плавающей запятой как VT_R8 типы для автоматизации.

В следующем примере описываются объявления классов и экземпляров, иллюстрирующие использование каждого из числовых типов данных для задания свойств:

Class NumericDataClass
 {
   [key] uint8 Duint8;
   SInt8       Dchar;
   UInt16      Dtword;
   Sint16      Dinst16;
   UInt32      Ddword;
   Sint32      Dinst1;
   Sint32      Dinst2;
   Sint32      Dinst3;
   Sint32      Dinst4;
   Sint32      Dinst5;
   Real32      Dfloat;
   Real64      Ddouble1;
   Real64      Ddouble2;
 };

instance of NumericDataClass
 {
   Duint8   =  122;
   Dchar    = -128;
   Dtword   =  30;
   Dinst16  = -1445;
   Ddword   =  6987777;
   Dinst1   = -455589;
   Dinst2   =  23;
   Dinst3   =  03;         // Base 8
   Dinst4   =  0xFe;       // Base 16
   Dinst5   =  11b;        // Base 2
   Dfloat   =  3.1478;
   Ddouble1 =  99987.3654;
   Ddouble2 =  2.3e-2;
 };