0

我有__int64一个 64 位FILETIME值。FILETIME有一个dwLowDateTimedwHighDateTime。当我尝试将 a 分配给 a__int64时,FILETIME我得到一个 C2440。如何将 分配__int64FILETIME

或者我如何拆分,__int64以便我可以将低部分分配给dwLowDateTime高部分dwHighDateTime

4

3 回答 3

3

这是基本轮廓。

__int64 t;
FILETIME ft;

ft.dwLowDateTime = (DWORD)t;
ft.dwHighDateTime = (DWORD)(t >> 32);

不推荐的方法

ft = *(FILETIME *)(&t);

由于 FILETIME 的巧妙安排,它会起作用,但牺牲可移植性和清晰度是不值得的。仅在被证明的迫切需要时使用并将其包装在断言中以证明它会起作用。

于 2009-07-08T20:06:59.570 回答
2

麦克风,

您可以使用 ULARGE_INTEGER 结构将 __int64 复制到 FILETIME 中:

__int64 i64;
ULARGE_INTEGER li;
FILETIME ft;

li.QuadPart = i64;
ft.dwHighDateTime = li.HighPart;
ft.dwLowDateTime = li.LowPart;
于 2009-07-08T20:13:55.763 回答
0
__int64 i;
FILETIME ft;

// From __int64 to FILETIME

ft.dwHighDateTime = (DWORD)(i >> 32);
ft.dwLowDateTime = (DWORD)(i & 0xFFFFFFFF);


// From FILETIME to __int64

i = (ft.dwHighDateTime << 32) + ft.dwLowDateTime;
于 2009-07-08T20:10:07.020 回答