[fpc-pascal] Extended, Currency and TDateTime memory layout

Felipe Monteiro de Carvalho felipemonteiro.carvalho at gmail.com
Sat Aug 7 20:56:41 CEST 2010

For single and double there is a nice converter which shows the binary layout:


Unfortunately there seams to be much less resources about extended...

On Fri, Aug 6, 2010 at 4:52 PM, Michael Van Canneyt
<michael at freepascal.org> wrote:
> Strange, because tkCurrency exists ?
> A currency is a Int64, which is the currency amount multiplied by 10000.

Well, apparently Delphi 6 RTTI thinks that it is a float. Check this code:

471	          else if ElmTypeInfo.Kind in [tkFloat] then begin
472	            case TypeData.FloatType of
473	              ftSingle: Stream.Write(DynArray^, ArrayLength *
474	              ftDouble: Stream.Write(DynArray^, ArrayLength *
475	              ftComp: Stream.Write(DynArray^, ArrayLength * SizeOf(Comp));
476	              ftCurr: Stream.Write(DynArray^, ArrayLength *
477	              ftExtended: Stream.Write(DynArray^, ArrayLength *
478	            end;

But this code is in another part of the program.

For that particular part it simply converts any float type to
extended, which was a pretty nasty thing to do.

Felipe Monteiro de Carvalho

More information about the fpc-pascal mailing list