2

我已经花了很多时间研究这个并且非常卡住:我的问题是 - Delphi TDateTime 的内部格式在 Delphi 7(2002 年左右发布)和今天之间是否发生了变化?

场景:我正在读取一个由 Delphi 7 应用程序创建的二进制日志文件,供应商告诉我它是记录中的 TDateTime,但解码这些位表明它显然不是标准的 IEEE 754 浮点,即使现代 Delphi 生成的 TDateTime 是.

但它是某种浮点数,大约有 15 位指数和 45 位有效数字(与 IEE754 中的 11 和 53 位相反),并且前导位是 1(在 IEE754 中表示负数)显然不是负面的,例如当前日期/时间。

旧文档中的提示表明 TDateTime “读取为”双精度,但不一定在内部表示为一,这意味着内部格式几乎不可见,除非这些 TDateTime 以二进制形式写出。

我怀疑是 Delphi 8 发生了变化,它添加了 .NET 支持,但我根本无法在任何地方找到对此的任何引用。我有 perl 代码 (!) 可以区分这些主要工作的类型,但我很想找到一个正式的规范,这样我就可以正确地做到这一点。

有没有遇到过这种情况的老手?

~~~ 史蒂夫

4

2 回答 2

4

Nothing has changed since Delphi 7. In Delphi 7, and in fact previous versions, TDateTime is IEEE754, measuring the number of days since the Delphi epoch.

You are going to need to get in touch with the software vendor and try to work out what this data's format really is. It would be surprising if the format was a non-IEEE754 floating point data type. Are you quite sure that it is floating point?

于 2012-12-16T18:39:11.853 回答
0

至于 BCB3、BCB6 和 D4,它正是 IEEE 754双精度浮点格式,在 VCL 源文件system.pas(包括在 BCB6 中)中它是这样定义的:

TDateTime = type Double;
于 2014-02-06T11:38:56.970 回答