我正在尝试解码在Windows注册表中编码为REG_BINARY的日期。特别是这个日期:
SignaturesLastUpdated REG_BINARY 720CB9EBE8CBCE01
应该在2013年。
知道如何手动解码吗? (即不使用任何内置的C#或C ++库)
答案 0 :(得分:1)
这是FILETIME structure,其定义为:
包含代表100纳秒数的64位值 自1601年1月1日(UTC)起间隔。
结构如下:
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
}