测试程序:
#include <stdio.h>
#include <windows.h>
LARGE_INTEGER a = {0};
void main()
{
//赋值
//a.QuadPart = 0x1020304050607080;
a.QuadPart = 0x9999;
//输出1、2、3
printf("1. Hi= 0x%04x, LO= 0x%04x\n", a.HighPart, a.LowPart); //
printf("2. Hi= 0x%04x, LO= 0x%04x\n", a.u.HighPart, a.u.LowPart); //
printf("3. a= %016I64x\n", a.QuadPart); //直接输出
//换成“字节序”方式输出
unsigned char *pBuf = (unsigned char *)&a;
printf("4. 字节序= ");
for(int i=0; i<8; i++)
{
printf("%02x ", pBuf[i]);
}
printf("\n");
//赋值
LARGE_INTEGER b = a;
printf("5. b= %016I64x\n", b.QuadPart); //直接输出
}
%016I64x
第一个016是指的8字节输出,当最左边无数据时用00填充;后面的I64x是__int64的前缀要求格式十六进制输出。
最后输出:
1. Hi= 0x0000, LO= 0x9999
2. Hi= 0x0000, LO= 0x9999
3. a= 0000000000009999
4. 字节序= 99 99 00 00 00 00 00 00
5. b= 0000000000009999
Press any key to continue
下面再给一个测量Sleep(100)延时精度测量函数:
LARGE_INTEGER litmp;
LONGLONG qt1,qt2;
double dft,dff,dfm;
//获得时钟频率
QueryPerformanceFrequency(&litmp);//获得时钟频率
dff=(double)litmp.QuadPart;
//获得初始值
QueryPerformanceCounter(&litmp);
qt1=litmp.QuadPart;
//下面一些耗时的操作
Sleep(1);
//获得终止值
QueryPerformanceCounter(&litmp);
qt2=litmp.QuadPart;
//获得对应的时间值,转到毫秒单位上
dfm=(double)(qt2-qt1);
dft=dfm/dff;
printf("用时: %.3f 毫秒\n", dft*1000.0);
我的PC上测得Sleep(100) = 99.407 毫秒
继续:
INT64 lseek64( HANDLE v_fd, INT64 v_i64Pos, int v_iType )
{
LARGE_INTEGER li;
li.QuadPart = v_i64Pos;
li.LowPart = SetFilePointer( (HANDLE)fd, li.LowPart, &li.HighPart, iType );
return li.QuadPart;
}