GMa*_*ckG 16
我认为你不认为:"不要将FILETIME结构指针转换为a ULARGE_INTEGER*或__int64*value,因为它可能导致64位Windows上的对齐错误."
如果你真的想要它会是这样的:
__int64 to_int64(FILETIME ft)
{
return static_cast<__int64>(ft.dwHighDateTime) << 32 | ft.dwLowDateTime;
}
FILETIME ft = // ...
__int64 t = to_int64(ft);
Run Code Online (Sandbox Code Playgroud)
但是像这样:
FILETIME ft = // ...
__int64 t = *reinterpet_cast<__int64*>(&ft);
Run Code Online (Sandbox Code Playgroud)
不好.
QBz*_*ziZ 13
没有必要使用按位OR恢复到神秘的构造.Windows API提供了执行此操作所需的一切.
unsigned __int64 convert( const FILETIME & ac_FileTime )
{
ULARGE_INTEGER lv_Large ;
lv_Large.LowPart = ac_FileTime.dwLowDateTime ;
lv_Large.HighPart = ac_FileTime.dwHighDateTime ;
return lv_Large.QuadPart ;
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想直接去__int64.
__int64 convert_to_int64( const FILETIME & ac_FileTime )
{
return static_cast< __int64 > ( convert( ac_FileTime ) ) ;
}
Run Code Online (Sandbox Code Playgroud)
尝试
(__int64(filetime.dwHighDateTime)<<32) | __int64(filetime.dwLowDateTime)
Run Code Online (Sandbox Code Playgroud)