2010-12-16 365 views
0

dI有一個程序,其日期以二進制形式存儲,並以YY/MM/DD格式顯示在程序中。我用XVI32(http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm)看在十六進制的二進制文件,得到如下結果在C#中將十六進制值轉換爲日期

例如,

十六進制值:31 07 01 00
日期值:85/06/18(在YY/MM/DD格式)

又如,

十六進制值:EF 1B 01 00
日期值:00/01/01(YY/MM/DD格式)

最後一個例子,

十六進制值:32 07 01 00
日期值:85/06/19(在YY/MM/DD格式)

我不需要編程代碼,但需要了解從十六進制值到實際可讀日期格式的轉換。謝謝。

回答

0

該數字是自某個時期以來的天數的小端表示。它看起來像軟件沒有計算出正確的東西,因爲日期只是1801-01-01的幾天。

 
+------------+------------+----------------+-------------+ 
| Date | Hex value | Decimal (days) | Date - days | 
+------------+------------+----------------+-------------+ 
| 1985-06-18 | 0x00010731 | 67377   | 1800-12-28 | 
| 1985-06-19 | 0x00010732 | 67378   | 1800-12-28 | 
| 2000-01-01 | 0x00011bef | 72687   | 1800-12-28 | 
+------------+------------+----------------+-------------+ 

看到它將1801-01-01轉換成什麼可能很有趣。如果它使用1800-12-28作爲紀元,則應將其保存到文件時轉換爲4或04 00 00 00。如果它轉換爲00 00 00 00,那麼軟件使用的日期數字會跳過某個日期的某個日期。

因此,總結:十六進制值表示自1800-12-28可能的時代以來的天數。要獲取日期,將在該日期中添加天數,這會導致日期顯示在程序中。

相關問題