现在的位置: 首页 > 综合 > 正文

ULARGE_INTEGER运算

2013年12月02日 ⁄ 综合 ⁄ 共 475字 ⁄ 字号 评论关闭

  在调用GetDiskFreeSpaceEx()获取磁盘空间时,由于参数是ULARGE_INTEGER(64位整数),所以普通的“加减乘除”并不支持(是没有实现),因此我们采用其他办法来实现,先来看下ULARGE_INTEGER的结构定义:

typedef union _ULARGE_INTEGER {
  struct {
    DWORD LowPart;
    DWORD HighPart;
  } ;
  struct {
    DWORD LowPart;
    DWORD HighPart;
  } u;
  ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;

在一次应用中,需要将返回的空间大小转换成以"GB"为单位的,所以写了这样的宏定义:

#define GB(x) ((x.HighPart << 2) + ((DWORD)x.LowPart) / 1024.0 / 1024.0 / 1024.0)

当然,你也可以选择将x两边加上括号即“#define GB(x) (((x).HighPart << 2) + ((DWORD)(x).LowPart) / 1024.0 / 1024.0 / 1024.0)"

抱歉!评论已关闭.