什麼是將FILETIME
結構轉換爲__int64
的正確方法?你能告訴我嗎?FILETIME to __int64
11
A
回答
13
我不認爲你應該這樣做:「請勿將指向FILETIME
結構的指針指向ULARGE_INTEGER*
或__int64*
值,因爲它可能會導致64位Windows上的對齊錯誤。」
如果你真的希望它會是這樣的:
__int64 to_int64(FILETIME ft)
{
return static_cast<__int64>(ft.dwHighDateTime) << 32 | ft.dwLowDateTime;
}
FILETIME ft = // ...
__int64 t = to_int64(ft);
但這樣的:
FILETIME ft = // ...
__int64 t = *reinterpet_cast<__int64*>(&ft);
是壞的。
4
嘗試
(__int64(filetime.dwHighDateTime)<<32) | __int64(filetime.dwLowDateTime)
1
當然,你可以只通過在澆鑄爲FILETIME的__int64如下*(* FILETIME)& int64Val。這將在Visual C++下正常工作。
即
__int64 createTime = 0;
__int64 accessTime = 0;
__int64 writeTime = 0;
GetFileTime(hFile, *(FILETIME*)&createTime, *(FILETIME*)&accessTime, *(FILETIME*)&writeTime);
7
有沒有必要恢復使用按位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 ;
}
或者如果你想直接去__int64。
__int64 convert_to_int64(const FILETIME & ac_FileTime)
{
return static_cast<__int64> (convert(ac_FileTime)) ;
}
1
您可以嘗試下面的代碼。代碼是從Chromium項目
template <class Dest, class Source>
inline Dest bit_cast(const Source& source) {
\t Dest dest;
\t memcpy(&dest, &source, sizeof(dest));
\t return dest;
}
//FILETIME to __int64
__int64 FileTimeToMicroseconds(const FILETIME& ft) {
\t return bit_cast<__int64, FILETIME>(ft)/10;
}
void MicrosecondsToFileTime(__int64 us, FILETIME* ft) {
\t *ft = bit_cast<FILETIME, __int64>(us * 10);
}
int _tmain(int argc, _TCHAR* argv[])
{
\t __int64 nTmpUint64 = 13060762249644841;
\t time_t unixtime;
\t FILETIME nTmpFileTm;
\t MicrosecondsToFileTime(nTmpUint64,&nTmpFileTm);
\t return 0;
}
相關問題
- 1. 使用__int64 GetSystemTimeAsFileTime調用參數
- 2. 像FILETIME處理結構如UInt64/Int64
- 3. QDateTime到FILETIME
- 4. FILETIME在x64
- 5. 爲什麼過載使用無符號__int64和__int64模糊
- 6. ReadProcessMemory與__int64地址
- 7. 最新可能FILETIME
- 8. 轉換回__int64或長期
- 9. __int64 vs int - 內存管理
- 10. __int64怪異列表輸出
- 11. 在C++中爲FILETIME結構分配數據和時間
- 12. 如何減去兩個FILETIME?
- 13. 從FILETIME創建變體
- 14. C++ \將FILETIME轉換爲秒
- 15. 將java.util.Date對象轉換爲Windows FILETIME結構
- 16. JNI無法檢測到NetBeans上的__int64
- 17. 將FILETIME轉換爲字符串,否則
- 18. 如何使用strtol從__int64值讀取?
- 19. 將std :: string轉換爲MSVC特定__int64
- 20. 將__int64傳遞給CreateThread參數
- 21. 在VC6中使用__int64和std :: ostringstream
- 22. 在Windows中將__int64轉換爲long
- 23. 將刻度轉換爲time_t或Filetime()
- 24. 使用filetime時的php警告()
- 25. 如何將PWCHAR轉換爲FILETIME結構?
- 26. 如何將TDateTime轉換爲FILETIME?
- 27. 如何將FILETIME轉換爲Excel日期
- 28. 將Unix/Linux時間轉換爲Windows FILETIME
- 29. DateTime.FromFileTime(fileTime).ToLocalTime()更快的替代方法ToString()
- 30. 轉換Windows 64位FILETIME結構格式,XSL
我在 – GManNickG 2009-10-14 14:36:28
編輯的過程:)怎麼樣的memcpy(<__int64>,與FILETIME,8); ?它安全嗎? – akif 2009-10-14 15:42:22
我會發現'memcpy'難以理解,但我相信它會起作用。編譯器可能可以優化轉換和/或更好。 – GManNickG 2009-10-14 15:51:22