숫자(WMI)
MOF에서 숫자는 숫자 값을 설명하는 숫자입니다. MOF는 Automation으로 변환되는 다양한 데이터 형식을 제공하며 이러한 숫자가 다른 형식일 수도 있습니다. 다음 표에서는 MOF에서 지원하는 숫자 값을 나열합니다.
데이터 형식 | 자동화 유형 | 묘사 |
---|---|---|
sint8 | VT_I2 | 부가된 8비트 정수입니다. |
sint16 | VT_I2 | 부가된 16비트 정수입니다. |
sint32 | VT_I4 | 부가된 32비트 정수입니다. |
sint64 | VT_BSTR | 문자열 형식으로 서명된 64비트 정수입니다. 이 형식은 ANSI(미국 국립 표준 연구소) C 규칙에 따라 16진수 또는 10진수 형식을 따릅니다. |
real32 | VT_R4 | IEEE(Institute of Electrical and Electronics Engineers, Inc.) 표준을 따르는 4 바이트 부동 소수점 값입니다. |
real64 | VT_R8 | IEEE 표준을 따르는 8 바이트 부동 소수점 값입니다. |
uint8 | VT_UI1 | 부호 없는 8비트 정수입니다. |
uint16 | VT_I4 | 부호 없는 16비트 정수입니다. |
uint32 | VT_I4 | 부호 없는 32비트 정수입니다. |
uint64 | VT_BSTR | 문자열 형식의 부호 없는 64비트 정수입니다. 이 형식은 ANSI C 규칙에 따라 16진수 또는 10진수 형식을 따릅니다. |
유연하지만 MOF 코드는 Automation을 처리할 때 몇 가지 변경 사항이 발생합니다.
64비트 정수는 문자열로 인코딩해야 합니다.
Automation은 64비트 정수 계열 형식을 지원하지 않습니다.
자동화 형식이 항상 MOF 데이터 형식에 비트 크기에 해당하는 것은 아닙니다.
예를 들어 Automation은 VT_I4 사용하여 부호 없는 16비트 값을 반환합니다. 이 불일치는 서명 확장 문제로 인해 존재합니다. Automation이 VT_I4 대신 VT_I2 사용하는 경우 65,536이 값 1로 표시되어 형식 및 범위 문제가 발생합니다. 마찬가지로 Automation은 uint32 포함할 더 큰 정수 형식이 없기 때문에 uint32 형식을VT_I4 나타냅니다.
8비트 숫자 형식의 표현은 변경할 필요가 없습니다.
Automation은 부호 없는 8비트 형식인 VT_UI1 지원합니다.
MOF는 긴 상수도 지원합니다. 선택적 음수 기호와 함께 간단한 숫자 계열을 사용하여 긴 상수 선언 긴 상수는 이를 보유하도록 선언된 변수의 크기를 초과할 수 없습니다. 긴 상수의 몇 가지 예는 1000 및 12310입니다.
MOF는 대체 숫자 형식도 지원합니다. 다음 표에서는 16진수, 이진 및 8진수 상수에 대해 설명하는 데 사용해야 하는 특수 문자를 나열합니다.
상수 | 특수 문자 | 본보기 |
---|---|---|
십진법 |
없음 |
val = 65 |
16 진수 |
0x 접두사 |
val = 0x41 |
진수 |
선행 0 |
val = 0101 |
바이너리 |
후행 B |
val = 1000001B |
부동 소수점 상수는 다음과 같이 과학적 표기법과 분수를 나타낼 수 있습니다.
3.14
-3.14
-1.2778E+02
WMI는 부동 소수점 상수는 Automation의 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;
};