gpt4 book ai didi

将 uint64_t 转换为 FILETIME

转载 作者:行者123 更新时间:2023-11-30 17:22:09 27 4
gpt4 key购买 nike

我正在尝试从文件中获取字节数组,将其解释为 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正确解析为 11:23:10 19.08.2010

也许缺少字节顺序转换或者我现在无法发现的其他问题?

最佳答案

看来您的代码没问题,只是年份显示为 110,因为您在填充 struct tm 时在代码中减去了 1900。但这是标准的——struct tm应该包含减去 1900 的年份。您只需要在打印该值时小心即可。

关于将 uint64_t 转换为 FILETIME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28082499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com