FILETIME到__int64

aki*_*kif 12 c++ int64

FILETIME结构转换为什么的正确方法是什么__int64?你能告诉我吗?

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)

  • 现在(从 C++11 开始)它可以简单地写成`ULARGEINTEGER{ ft.dwLowDateTime, ft.dwHighDateTime }.QuadPart`。可以说不更具可读性,但是您不需要任何额外的功能/宏。 (3认同)

Mar*_*n B 5

尝试

(__int64(filetime.dwHighDateTime)<<32) | __int64(filetime.dwLowDateTime)
Run Code Online (Sandbox Code Playgroud)