Binary 在C中将十六进制值转换为日期#

Binary 在C中将十六进制值转换为日期#,binary,hex,Binary,Hex,dI有一个程序,其日期以二进制形式存储,并以YY/MM/DD格式显示在程序上。我用XVI32(http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm)查看十六进制的二进制文件,得到以下结果 比如说, 十六进制值:31 07 01 00 日期值:2018年6月85日(年/月/日格式) 再比如, 十六进制值:EF 1B 01 00 日期值:00/01/01(年/月/日格式) 最后一个例子 十六进制值:32 07 01 00 日期值

dI有一个程序,其日期以二进制形式存储,并以YY/MM/DD格式显示在程序上。我用XVI32(http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm)查看十六进制的二进制文件,得到以下结果

比如说,

十六进制值:31 07 01 00
日期值:2018年6月85日(年/月/日格式)

再比如,

十六进制值:EF 1B 01 00
日期值:00/01/01(年/月/日格式)

最后一个例子

十六进制值:32 07 01 00
日期值:85/06/19(年/月/日格式)


我不需要编程代码,但需要理解从十六进制值到实际可读日期格式的转换。谢谢。

这个数字是从某个时代开始的天数的一个小小的endian表示。看起来软件的计算结果不太正确,因为日期离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 | +------------+------------+----------------+-------------+ +------------+------------+----------------+-------------+ |日期|十六进制值|十进制(天)|日期-天| +------------+------------+----------------+-------------+ |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
,则软件使用的日期数学将跳过某些日期

因此,总而言之:十六进制值表示自1800-12-28这一可能纪元以来的天数。要获取日期,将天数添加到此日期,从而在程序中显示日期