|
在“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:因为联合的长度取决于最长的数据成员的长度,相当于成员公用内存。
①、在小端的情况下,因为低32位数字在前,高32位在后:
如果将这个64位大整数赋值 0x1234:
- LARGE_INTEGER data;
- data.LowPart = 0x34;
- data.HighPart = 0x12;
复制代码
②、在大端的情况下,高32位数字在前,低32位在后:
如果将这个64位大整数赋值 0x1234:
- LARGE_INTEGER data;
- data.u.LowPart = 0x34;
- data.u.HighPart = 0x12;
复制代码
|
评分
-
查看全部评分
上一篇: GetFileSize 函数说明下一篇: GetFileSizeEx 函数说明
|