dI有一个程序,其日期以二进制形式存储,并在程序中显示为YY / MM / DD格式。我使用XVI32(http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm)查看十六进制中的二进制文件并得到以下结果
例如,
十六进制值: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 :(得分: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纪元以来的天数。要获取日期,会将天数添加到此日期,这会导致程序中显示的日期。