LARGE_INTEGER 大整数结构体的解析「建议收藏」

发布时间:2025-12-09 13:50:59 浏览次数:4

在“WinNT.h”文件中定义了一个结构体LARGE_INTEGER,十分巧妙

#if defined(MIDL_PASS)
typedef struct _LARGE_INTEGER {

#else // MIDL_PASS
typedef union _LARGE_INTEGER {

struct {

DWORD LowPart;
LONG HighPart;
} DUMMYSTRUCTNAME;
struct {

DWORD LowPart;
LONG HighPart;
} u;
#endif //MIDL_PASS
LONGLONG QuadPart;

} LARGE_INTEGER;

解释:根据预编译指令若定义宏MIDL_PASS,则将 结构体命名为LARGE_INTEGER,若未定义宏MIDL_PASS,则将联合体命名为LARGE_INTEGER。实际上如果编译器具有内置支持64位整数,使用QuadPart成员中存储的64位整数。否则,使用LowPart和HighPart成员的存储的64位整数。

在不支持内置64位情况下,即,采用联合体结构。联合体有两部分组成,DUMMYSTRUCTNAME 和 u:因为联合的长度取决于最长的数据成员的长度,相当于成员公用内存。

(1)在小端的情况下,因为低32位数字在前,高32位在后。

如果将这个64位大整数赋值0x1234:

LARGE_INTEGER data;
data.LowPart = 0x34;
data.HighPart = 0x12;

(2)在大端的情况下,高32位数字在前,低32位在后。

如果将这个64位大整数赋值0x1234:

LARGE_INTEGER data;
data.u.LowPart = 0x34;
data.u.HighPart = 0x12;

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477