typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
ULONGLONG QuadPart;
} ULARGE_INTEGER;
在不支持ULONGLONG 64位的数值时
使用struct {
DWORD LowPart;
DWORD HighPart;
};应该注意这个是按位取出来的值,必须经过出来才能得到正确的值.
#include <iostream>
#include <windows.h>
using namespace std;
void format(ULARGE_INTEGER a)//使用大数计算的方法获得正确的数值
{
char b[1000]={0};
int n=1,j,i;
for(i=0;i<32;++i,a.HighPart<<=1)
{
for(j=0;j<n;++j)
{
b[j]*=2;
}
if(a.HighPart&0x80000000)
b[0]+=1;
for(j=0;j<n;++j)
{
b[j+1]+=b[j]/10;
b[j]%=10;
}
while(b[j])
{
b[j+1]=b[j]/10;
b[j]%=10;
++j;
}
n=j;
}
for(i=0;i<32;++i,a.LowPart<<=1)
{
for(j=0;j<n;++j)
{
b[j]*=2;
}
if(a.LowPart&0x80000000)
b[0]+=1;
for(j=0;j<n;++j)
{
b[j+1]+=b[j]/10;
b[j]%=10;
}
while(b[j])
{
b[j+1]=b[j]/10;
b[j]%=10;
++j;
}
n=j;
}
j=n;
--j;
while(j>-1)
{
cout<<(int)b[j--];
}
}
int main(int argc,char *argv[])
{
ULARGE_INTEGER no1,no2,no3;
__int64 no4;//支持64位的数据类型时,才可以使用.
HANDLE hFile;
if(GetDiskFreeSpaceEx("e:",&no1,&no2,(PULARGE_INTEGER)&no4))
{
format(no1);
cout<<endl;
cout<<no4<<endl;
}
return 0;
}