我的值__int64
是64位FILETIME
值。 FILETIME
有一个dwLowDateTime
和dwHighDateTime
。当我尝试将__int64
分配给FILETIME
时,我会得到一个C2440。如何将__int64
分配给FILETIME
?
或者如何拆分__int64
以便我可以将低级部分分配给dwLowDateTime
,将高级部分分配给dwHighDateTime
?
答案 0 :(得分:3)
这是基本大纲。
__int64 t;
FILETIME ft;
ft.dwLowDateTime = (DWORD)t;
ft.dwHighDateTime = (DWORD)(t >> 32);
不推荐方法
ft = *(FILETIME *)(&t);
由于FILETIME的巧妙安排,它会起作用,但是在便携性和清晰度方面的牺牲是不值得的。只有在经过验证的需要时才使用和将其包装在断言中以证明它能够正常工作。
答案 1 :(得分:2)
麦克,
您可以使用ULARGE_INTEGER结构将__int64复制到FILETIME中:
__int64 i64;
ULARGE_INTEGER li;
FILETIME ft;
li.QuadPart = i64;
ft.dwHighDateTime = li.HighPart;
ft.dwLowDateTime = li.LowPart;
答案 2 :(得分: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;