我有__int64
一个 64 位FILETIME
值。FILETIME
有一个dwLowDateTime
和dwHighDateTime
。当我尝试将 a 分配给 a__int64
时,FILETIME
我得到一个 C2440。如何将 分配__int64
给FILETIME
?
或者我如何拆分,__int64
以便我可以将低部分分配给dwLowDateTime
高部分dwHighDateTime
?
这是基本轮廓。
__int64 t;
FILETIME ft;
ft.dwLowDateTime = (DWORD)t;
ft.dwHighDateTime = (DWORD)(t >> 32);
不推荐的方法
ft = *(FILETIME *)(&t);
由于 FILETIME 的巧妙安排,它会起作用,但牺牲可移植性和清晰度是不值得的。仅在被证明的迫切需要时使用并将其包装在断言中以证明它会起作用。
麦克风,
您可以使用 ULARGE_INTEGER 结构将 __int64 复制到 FILETIME 中:
__int64 i64;
ULARGE_INTEGER li;
FILETIME ft;
li.QuadPart = i64;
ft.dwHighDateTime = li.HighPart;
ft.dwLowDateTime = li.LowPart;
__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;