我试图从文件中获取字节数组,将其解释为uint64_t
,然后将此uint转换为FILETIME
在谷歌搜索并调试了一下之后,我一直坚持遵循错误的工作代码。
uint64_t win_filetime = *(uint64_t*)(&(((char*)buf)[(int)FILETIME_OFFSET]));
//at this moment win_filetime = 0x01cb3f90e7b52500
其中buf
包含FILETIME_OFFSET
所需的字节
然后尝试投射t1 = *(FILETIME *)(&win_filetime);
或
t1.dwLowDateTime = (DWORD)win_filetime;
t1.dwHighDateTime = (DWORD)(win_filetime >> 32);
将其传递给函数
tm FILETIME_to_time_t(const FILETIME *lpFileTime) {
time_t result;
SYSTEMTIME st;
struct tm tmp;
FileTimeToSystemTime(lpFileTime,&st);
memset(&tmp,0,sizeof(struct tm));
tmp.tm_mday = st.wDay;
tmp.tm_mon = st.wMonth - 1;
tmp.tm_year = st.wYear - 1900;
tmp.tm_sec = st.wSecond;
tmp.tm_min = st.wMinute;
tmp.tm_hour = st.wHour;
return tmp;
}
函数FILETIME_to_time_t()
返回垃圾(即年份= 110)
文件的样本值:0025B5E7903FCB0100
HexWorkshop正确解析为2010年8月19日11:23:10
也许缺少字数转换或我现在无法发现的其他事情?
答案 0 :(得分:0)
看起来你的代码还可以,只是年份显示110,因为在填充struct tm
时你的代码中减去了1900。这是标准的 - struct tm
假设包含年份减1900.您只需要在打印值时小心。