FileTime转换为字符串的时候容易出现的问题:精度不够,可以用下面的结构进行转化
高位给高位赋值,低位给低位赋值,转成字符串的时候直接用64位的QuadPart即可
C++:
LARGE_INTEGER是union;用于表示一64位有符号整数值.其他定义如下:
typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
};
LONGLONG QuadPart;
} LARGE_INTEGER;
如果你有编译器直接支持64位整数可以直接使用QuadPart(64位),否则分别对LowPart(32位)和HighPart(32位)存取,HighPart的最高位为符号位。
表示数的范围:--3689348814741910324到+4611686018427387903
LARGE_INTEGER的值等4000000000,在内存中的布局:
00 28 6B EE 00 00 00 00
(低字节 ) (高字节 )
Delphi声明:
ULARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: DWORD);
1: (
QuadPart: LONGLONG);
end;
{$EXTERNALSYM ULARGE_INTEGER}
PULargeInteger = ^TULargeInteger;
TULargeInteger = ULARGE_INTEGER;
UNICODE下示例代码(C++)
SYSTEMTIME st;
FILETIME ft;
ULARGE_INTEGER temp;
GetSystemTime(&st);//获取系统时间
SystemTimeToFileTime(&st,&ft);//转换为FileTime
//数据转换
temp.HighPart = ft.dwHighDateTime;
temp.LowPart = ft.dwLowDateTime;
//显示出来
str.Format(L"%I64d",temp.QuadPart);
MessageBox(str);
return ;