Числа (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;
};