2010-12-16 4 views
0

У меня есть программа, которая имеет даты, хранящиеся в двоичном формате и отображаемые в программе как формат YY/MM/DD. Я использую XVI32 (http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm), чтобы посмотреть на двоичный файл в шестнадцатеричном и получили следующие результатыПреобразование значений Hex в C#

Например,

значение Hex: 31 07 01 00
Дата значение: 85/06/18 (в YY/ММ/ДД)

Другой пример,

шестнадцатеричное значение: EF 1B 01 00
Дата значение: 00/01/01 (в формате YY/MM/DD)

Заключительный пример,

Hex значение: 32 07 01 00
Дата значение: 85/06/19 (в YY/MM/ДД)

мне не нужен программный код, но необходимо чтобы понять преобразование из шестнадцатеричного значения в формат, пригодный для чтения. Благодарю.

ответ

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. Чтобы получить дату, количество дней добавляется к этой дате, что приводит к дате, отображаемой в программе.

Смежные вопросы