From: Marius Amado Alves <amado.alves@netcabo.pt>
To: comp.lang.ada@ada-france.org
Subject: Re: How to byte swap an IEEE Float?
Date: Tue, 28 Jun 2005 17:59:27 +0100
Date: 2005-06-28T17:59:27+01:00 [thread overview]
Message-ID: <mailman.105.1119978018.17633.comp.lang.ada@ada-france.org> (raw)
In-Reply-To: <m2ekamzdb8.fsf@grendel.local>
On 28 Jun 2005, at 16:55, Simon Wright wrote:
> Marius Amado Alves <amado.alves@netcabo.pt> writes:
>
>> On 28 Jun 2005, at 14:53, Björn wrote:
>>
>>> I need to read some float values from file that have been written in
>>> big-endian byte order from a c-program. The simple swapping procedure
>>> that I have just interchanges the byte order of type IEEE_Float_32 to
>>> get little-endian. The problem is that for some values (eg.
>>> 33.229000)
>>> it is a "NaN" when doing IEEE_Float_32'Read and I get a constraint
>>> error (invalid data) from stream_io when the value is read. How do I
>>> get around this?
>>
>> Simple. Setup an array of bytes with the same representation of the
>> float type (use representation clauses and pragma Pack). Read the
>> array of bytes. Swap the bytes. Convert to the float type (use
>> unchecked conversion).
>
> Marius,
>
> I think you mean 'of the same length as the float type'?
>
> OP doesn't say what processor he gets the BE value from, but assuming
> PowerPC you either get Float (4 bytes) for digits <= 6 or Long_Float
> (8 bytes) for digits 7 .. 15.
>
> On Intel hardware there's an 80-bit Long_Long_Float (digits 18).
Sure. You know, I meant representation = bits and bytes, implying same
length. It seems the OP already has the float type (IEEE_Float_32),
32-bit = 4-byte long, and the data are floats of this length, only
different in byte order.
OP, if the data are of a different length, then you have to unchecked
convert first to a float type of that length, and then normal convert
to the final type (risking Constraint_Error).
next prev parent reply other threads:[~2005-06-28 16:59 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-28 13:53 How to byte swap an IEEE Float? Björn
2005-06-28 15:06 ` Marius Amado Alves
2005-06-28 15:55 ` Simon Wright
2005-06-28 16:59 ` Marius Amado Alves [this message]
2005-06-28 20:43 ` Björn
2005-06-29 0:13 ` Marius Amado Alves
2005-06-30 19:14 ` Randy Brukardt
2005-06-28 16:05 ` Martin Dowie
2005-06-28 23:35 ` Stephen Leake
2005-06-29 10:00 ` Björn
2005-06-30 0:52 ` Stephen Leake
2005-07-01 4:51 ` Simon Wright
2005-06-29 20:10 ` Damien
2005-06-30 11:35 ` Peter Hermann
2005-06-30 22:26 ` Damien
2005-07-01 7:37 ` Peter Hermann
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox