2009-04-05 4 views
5

Я знаю следующие пары шестнадцатеричных значений и дат:DateTime шестнадцатеричный формат

 
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 

Я не могу понять, как конвертировать из одного в другой ....

Любой признать шестигранник формат?

Al

ответ

11

Это просто битовое, несмотря на то, что это довольно странно формат времени :)

 
1111101100100101101001001011100 
         011100 - 28 minutes 
        01001  - 09 hours 
       11010   - 26 days 
      0010     - month 3 (zero-based, hence 2) 
11111011001      - 2009 years

бы мое предположение.

+0

избил меня. :-) Я видел этот формат раньше, но только в другом вопросе stackoverflow! – bobince

+0

Yikes ... Изначально я тренировал Unixtime, так как ни одна из обычных временных структур Windows не вписывается в 32 бита, но это ... странно. Тем более, что месяц, похоже, основан на нуле, но дней нет. – Joey

+0

Ничего себе. Спасибо, Йоханнес. Я действительно одобряю ответ. И так быстро. Brilliant! – Alan

2

12 бит год, 4 бит месяц (0-based), 5 бит день, 5 бит час, 6 бит минут.

Nice головоломка :-)

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; 
} 
Смежные вопросы