大家好,又见面了,我是你们的朋友全栈君。
在“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;
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160109.html原文链接:https://javaforall.cn