数字 (WMI)
在 MOF 中,用数字来描述数值。 MOF 提供各种转换为自动化的数据类型,还允许这些数字以不同的格式显示。 下表列出了 MOF 支持的数值。
数据类型 | 自动化类型 | 说明 |
---|---|---|
sint8 | VT_I2 | 8 位有符号整数。 |
sint16 | VT_I2 | 16 位有符号整数。 |
sint32 | VT_I4 | 32 位有符号整数。 |
sint64 | VT_BSTR | 字符串形式的有符号 64 位整数。 根据美国国家标准协会 (ANSI) C 规则,此类型遵循十六进制或十六进制格式。 |
real32 | VT_R4 | 遵循电气和电子工程师协会 (IEEE) 标准的 4 字节浮点值。 |
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 位数字类型的任何表示形式。
自动化支持无符号 8 位类型 VT_UI1。
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;
};