大家好,又见面了,我是你们的朋友全栈君。
在“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;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160109.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...