首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ULARGE_INTEGER进行算术运算

如何使用ULARGE_INTEGER进行算术运算
EN

Stack Overflow用户
提问于 2017-10-17 23:46:51
回答 2查看 1.1K关注 0票数 2

我有一个应用程序,我不断地检查磁盘空间,并将其与特定值进行比较。现在磁盘空间的计算公式为:

代码语言:javascript
复制
ULARGE_INTEGER p1;
ULARGE_INTEGER p2;
ULARGE_INTEGER p3;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3); 

现在,从上面的方法中,我获得了变量p3中的空闲可用空间。现在我如何将它与正常的整数值进行比较(算术运算也是如此)。此外,此代码必须在32位以及64位平台上工作。或者是否有任何其他选项来计算可用磁盘空间?谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-10-18 00:02:29

在编译器拥有本机64位类型之前,ULARGE_INTEGER是Windows API表示64位值的方式。

如今,在使用Visual C++编译器的Windows上,在ULARGE_INTEGER*和64位本机类型(如uint64_t*unsigned long long* )之间进行指针转换是安全的。

代码语言:javascript
复制
int compile_time_assert[(sizeof(ULARGE_INTEGER) == sizeof(unsigned long long)) ? 1 : -1];

unsigned long long freebytes = 0;
unsigned long long totalbytes = 0;
unsigned long long totalfree = 0;
GetDiskFreeSpaceEx(".", (ULARGE_INTEGER*)&freebytes, (ULARGE_INTEGER*)&totalbytes, (ULARGE_INTEGER*)&totalfree);

否则,如果你想避免强制转换,你可以这样做:

代码语言:javascript
复制
ULARGE_INTEGER p1 = {0};
ULARGE_INTEGER p2 = {0};
ULARGE_INTEGER p3 = {0};
unsigned long long freebytes = 0;
unsigned long long totalbytes = 0;
unsigned long long totalfree = 0;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3); 

freebytes = p1.QuadPart;
totalbytes = p2.QuadPart;
totalfree = p3.QuadPart;
票数 7
EN

Stack Overflow用户

发布于 2017-10-17 23:50:31

这是假设您的程序以Win中定义了ULARGE_INTEGER类型的Windows为目标。

ULARGE_INTEGER是一个联合,它包含一个QuadPart成员,该成员是整数的64位值。所以只要像这样做就行了:

代码语言:javascript
复制
if (p1.QuadPart < p2.QuadPart) ...

这也适用于32位版本,因为64位整数类型已经被面向Win32的编译器支持了很长一段时间(可能是从Win32诞生之日起)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46794133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档