【问题标题】:How to create FILETIME in Win32?如何在 Win32 中创建 FILETIME?
【发布时间】:2009-07-08 19:56:30
【问题描述】:

我有一个值 __int64,它是一个 64 位的 FILETIME 值。 FILETIMEdwLowDateTimedwHighDateTime。当我尝试将 __int64 分配给 FILETIME 时,我得到一个 C2440。如何将__int64 分配给FILETIME

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

【问题讨论】:

    标签: winapi int filetime


    【解决方案1】:

    这是基本大纲。

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

    不推荐方法

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

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

    【讨论】:

      【解决方案2】:

      迈克,

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

      __int64 i64;
      ULARGE_INTEGER li;
      FILETIME ft;
      
      li.QuadPart = i64;
      ft.dwHighDateTime = li.HighPart;
      ft.dwLowDateTime = li.LowPart;
      

      【讨论】:

        【解决方案3】:
        __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;
        

        【讨论】:

        • 掩码应该是 0xFFFFFFFF。除非您在
        猜你喜欢
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多