2009-04-05 11 views
5

Mam następujący wiedzieć parę DateTime wartości hex i terminach:formacie hex

 
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 

nie mogę dowiedzieć się, jak konwertować z jednego do drugiego ....

Każdy rozpoznaje hex format?

Al

Odpowiedz

11

To proste bitfield, mimo że to dość dziwne format czasu :)

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

byłoby moje przypuszczenie.

+0

pobili mnie do tego. :-) Widziałem ten format wcześniej, ale tylko w innym pytaniu stackoverflow! – bobince

+0

Yikes ... Początkowo trenowałem Unixtime, ponieważ żadna z typowych struktur czasu Windows nie mieściła się w 32 bitach, ale to jest ... dziwne. Zwłaszcza że miesiąc jest pozornie zerowy, ale dni nie są. – Joey

+0

Wow. Dziękuję Johannes. Naprawdę doceniam odpowiedź. I tak szybko. Znakomity! – Alan

2

12-bitowy rok, 4-bitowy miesiąc (w oparciu 0), 5-bitowy dzień, 5-bitowy, 6-bitowy minutowy.

Nicea puzzle :-)

1

Zdaję sobie sprawę, że jest to stary temat, ale uważam, że warto i myśli chciałbym dodać do niego moje 2 centy.

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; 
}