数字(WMI)
在 MOF 中,数字是描述数值的数字。 MOF 提供了各种数据类型,这些数据类型可转换为自动化,还允许这些数字的格式不同。 下表列出了 MOF 支持的数值。
数据类型 | 自动化类型 | 描述 |
---|---|---|
sint8 | VT_I2 | 带符号 8 位整数。 |
int16 | VT_I2 | 带符号 16 位整数。 |
sint32 | VT_I4 | 带符号 32 位整数。 |
sint64 | VT_BSTR | 字符串形式的带符号 64 位整数。 根据美国国家标准研究所(ANSI)C 规则,此类型遵循十六进制或十六进制格式。 |
real32 | VT_R4 | 4 字节浮点值,遵循电气和电子工程师研究所(IEEE)标准。 |
real64 | VT_R8 | 遵循 IEEE 标准的 8 字节浮点值。 |
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 还支持备用数字格式。 下表列出了用于描述十六进制、二进制和八进制常量的特殊字符。
不断 | 特殊字符 | 例 |
---|---|---|
十进制 |
没有 |
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;
};