5

我知道以下一对十六进制值和日期:

7D 92 D2 5C = 26/03/2009 - 09:28
7D 92 DA CC = 27/03/2009 - 11:12
7D 92 E3 56 = 28/03/2009 - 13:22
7D 92 EC 4F = 29/03/2009 - 17:15
7D 92 F3 16 = 30/03/2009 - 12:22
7D 92 FB 1A = 31/03/2009 - 12:26
7D 93 0B 01 = 01/04/2009 - 12:01
7D 93 12 88 = 02/04/2009 - 10:08
7D 93 1A 30 = 03/04/2009 - 08:48
7D 93 22 DD = 04/04/2009 - 11:29
7D 93 2A D5 = 05/04/2009 - 11:21

我不知道如何从一个转换到另一个....

有人认识十六进制格式吗?

4

3 回答 3

11

这是一个简单的位域,尽管这是一种非常奇怪的时间格式:)

1111101100100101101001001011100
                         011100 - 28 分钟
                    01001 - 09 小时
               11010 - 26 天
           0010 - 第 3 个月(从零开始,因此为 2)
11111011001 - 2009 年

会是我的猜测。

于 2009-04-05T15:44:49.413 回答
2

12 位年,4 位月(从 0 开始),5 位日,5 位小时,6 位分钟。

不错的谜题:-)

于 2009-04-05T15:47:16.523 回答
1

我意识到这是一个古老的话题,但我发现它很有用,并认为我会增加我的 2 美分。

u8 getMinutes(u32 in)
{
    return in & 0x3f;
}

u8 getHours(u32 in)
{
    return (in>>6) & 0x1f;
}

u8 getDays(u32 in)
{
    return (in>>11) & 0x1f;
}

u8 getMonths(u32 in)
{
    return ((in>>16)& 0xf)+1;
}

u16 getYears(u32 in)
{
    return (in>>20) & 0x7ff;
}

void printDate(u32 in)
{
    printf("%d/%d/%d - %d:%d", getDays(in), getMonths(in), getYears(in), getHours(in), getMinutes(in));
}

int main(int argc, char *argv[])
{
    u32 t = 0x7D92D25C;
    printDate(t);
    return 0;
}
于 2010-02-10T19:19:07.997 回答