我正在尝试解码 Windows 注册表中编码为 REG_BINARY 的日期。特别是这个日期:
SignaturesLastUpdated REG_BINARY 720CB9EBE8CBCE01
应该在 2013 年。
知道如何手动解码吗?(即不使用任何内置的 C# 或 C++ 库)
它是一个FILETIME 结构,定义为:
包含一个 64 位值,表示自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数。
该结构如下所示:
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
成员
dwLowDateTime 文件时间的低位部分。
dwHighDateTime 文件时间的高位部分。
以下是如何将其转换为 Unix 时间(在 Go 中):
type Filetime struct {
LowDateTime uint32
HighDateTime uint32
}
// Nanoseconds returns Filetime ft in nanoseconds
// since Epoch (00:00:00 UTC, January 1, 1970).
func (ft *Filetime) Nanoseconds() int64 {
// 100-nanosecond intervals since January 1, 1601
nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
nsec -= 116444736000000000
// convert into nanoseconds
nsec *= 100
return nsec
}