Re: Binary file byte ordering



In alt.comp.lang.borland-delphi message <8db81f2c-385f-478d-90ff-
1e82339e8de3@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>, Tue, 22 Jan 2008 09:49:20,
groufosse@xxxxxxx posted:

I am using a program to read a binary file that was written in Delphi.
The data is Delphi's extended
precision type, which is 10 bytes. I need to convert those over to a
double precision number (8 bytes)

Conversion is automatic in Delphi; you have not said that you are using
an inferior programming language.

Here's the question: exactly how does the Delphi compiler interpret
those 10 bytes? I'll take a step
back....I know that the actual readfile is done by a win32 call
through windows app. So I guess
I have 2 questions:

1 - How are the bytes ordered when they are read in? This is critical
because I am reading
in a byte at a time (as U8)

2 - What is the ordering of the bytes....The endian-ness?

I have an algorithm to convert the byes that constitute the extended
precision to doubles,
but I guess it won't be very useful if I cannot get the byes ordered
correctly!

Within a byte, the bits are in the standard order for PC CPUs.

There are only two reasonable possibilities for the order of the bytes,
and only one of them will give sensible results; you presumably expect
the data to be within the Double range, with 11 exponent bits, and
extended has 15 exponent bits. Starting at the wrong end, and other
things being equal, there's only one chance in 2^4 of any one datum
fitting in Double, let alone being of plausible magnitude.

The sign bit is always the MSB of the highest byte.

Someone here may know whether, and if so how, an Extended can be stored
in the FPU by an instruction AND read back as Double by another
instruction; that would be a nice function to have in Delphi code. In
fact, to anyone with a low-level Delphi debugger working, the answer to
that might be obvious on inspecting the code for Double := Extended ; .

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Delphi 3? Turnpike 6.05
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/&c., FAQqy topics & links;
<URL:http://www.bancoems.com/CompLangPascalDelphiMisc-MiniFAQ.htm> clpdmFAQ;
<URL:http://www.borland.com/newsgroups/guide.html> news:borland.* Guidelines
.



Relevant Pages

  • Re: Moving from Delphi to C++
    ... is not relevant for Delphi users. ... > Okay, okay, here are two small exercices for you: ... > and no knowledge if this precision is achieved via FPU or SSE2, ... You are not what Borland expect of Delphi "users". ...
    (borland.public.delphi.non-technical)
  • Re: Binary file byte ordering
    ... I am using a program to read a binary file that was written in Delphi. ... precision type, which is 10 bytes. ... Discard Bit0 - Bit 10 ... Alternatively a bit of assembler on the FP processor could do it. ...
    (alt.comp.lang.borland-delphi)
  • Binary file byte ordering
    ... I am using a program to read a binary file that was written in Delphi. ... precision type, which is 10 bytes. ... through windows app. ...
    (alt.comp.lang.borland-delphi)
  • Re: Need to get natural logarithm of a large integer ln(x)
    ... If I use the Windows calculator I get 8.5993369457292772667692975044269 ... How do I get more precision from Delphi ??? ... Furthermore, your input value has only 8 significant figures, so the ...
    (borland.public.delphi.non-technical)
  • Re: FDIV and QueryPerformanceFrequency with Visual C++
    ... FDIVP instruction from this code despite enabling the ... parts of the code), preferring SSE scalar instructions, but it seems ... store result of x87 division ... I think it could have used DIVSD without much loss of precision ...
    (comp.lang.asm.x86)