VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 664|回复: 3

[扩展阅读] LARGE_INTEGER 大整数结构体的解析

[复制链接]
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-6-18 23:56:59 | 显示全部楼层 |阅读模式
在“WinNT.h”文件中定义了一个结构体 LARGE_INTEGER,定义的十分巧妙!

  1. #if defined(MIDL_PASS)
  2. typedef struct _LARGE_INTEGER {
  3. #else // MIDL_PASS
  4. typedef union _LARGE_INTEGER {
  5.     struct {
  6.         DWORD LowPart;
  7.         LONG HighPart;
  8.     } DUMMYSTRUCTNAME;
  9.     struct {
  10.         DWORD LowPart;
  11.         LONG HighPart;
  12.     } u;
  13. #endif //MIDL_PASS
  14.     LONGLONG QuadPart;
  15. } LARGE_INTEGER;
复制代码


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

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

①、在小端的情况下,因为低32位数字在前,高32位在后:

如果将这个64位大整数赋值 0x1234:
  1. LARGE_INTEGER data;
  2. data.LowPart = 0x34;
  3. data.HighPart = 0x12;
复制代码


②、在大端的情况下,高32位数字在前,低32位在后:
如果将这个64位大整数赋值 0x1234:
  1. LARGE_INTEGER data;
  2. data.u.LowPart = 0x34;
  3. data.u.HighPart = 0x12;
复制代码

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
00_avatar_small YJHui + 1 + 1

查看全部评分





上一篇:GetFileSize 函数说明
下一篇:GetFileSizeEx 函数说明
96_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-18 17:51:31 | 显示全部楼层
感谢整理,学习了!!!
41_avatar_middle
最佳答案
0 
在线会员 发表于 2020-8-14 19:11:08 | 显示全部楼层
感谢老大分享,学习了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-30 01:12

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表