数字(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;
 };