From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Examining individual bytes of an integer
Date: Mon, 15 Oct 2018 00:28:56 +0300
Date: 2018-10-15T00:28:56+03:00 [thread overview]
Message-ID: <g2hqooFq0usU1@mid.individual.net> (raw)
In-Reply-To: <pq0706$60k$1@dont-email.me>
On 18-10-14 22:55 , Jeffrey R. Carter wrote:
> On 10/14/2018 09:15 PM, Henrik Härkönen wrote:
>>
>> type Byte is mod 256;
>> type Word is mod 2 ** 32;
>>
>> type E2 is array(1 .. 4) of Byte;
>> function Convert_To_E2 is new Ada.Unchecked_Conversion (Source
>> => Word,
>> Target =>
>> E2);
>>
>> function Convert_To_Word is new Ada.Unchecked_Conversion (Source
>> => E2,
>> Target
>> => Word);
>
> Unchecked_Conversion is the Ada Way.
Or Interfaces.Unsigned_xx and shifts.
> Often it is a good idea to specify
> the sizes of all the types involved to ensure that the conversion is
> between equal-sized hunks of memory.
Yes, but GNAT normally gives a warning if the sizes differ.
> However, with the array, you don't know which index corresponds to which
> byte of the integer. You can examine the bytes of several values to
> determine this, but on a different platform or with a different compiler
> the correspondence may be different.
Yes: endianness (or a perverse array index order, see below).
> Usually the lowest index
> corresponds to the lowest address, but that is not guaranteed by the
> language.
Not guaranteed, but implied by the "Implementation advice":
- RM 13.3(11): X'address denotes the address of the first of the storage
elements allocated to X.
- RM 13.3(14): For an array X, X'Address should point at the first
component of the array [...].
Combining those two, it seems that the first element of an array should
start at the first storage element (= lowest address) allocated to the
array.
By reasonable induction :-) the second, third, etc. array elements
follow in increasing address order. But not _guaranteed_, I agree.
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2018-10-14 21:28 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-14 19:15 Examining individual bytes of an integer Henrik Härkönen
2018-10-14 19:55 ` Jeffrey R. Carter
2018-10-14 21:28 ` Niklas Holsti [this message]
2018-10-15 10:18 ` AdaMagica
2018-10-15 18:43 ` Niklas Holsti
2018-10-15 20:18 ` Randy Brukardt
2018-10-16 10:18 ` AdaMagica
2018-10-16 11:55 ` Dmitry A. Kazakov
2018-10-16 22:35 ` Randy Brukardt
2018-10-17 8:10 ` Dmitry A. Kazakov
2018-10-17 9:47 ` briot.emmanuel
2018-10-17 10:04 ` Dmitry A. Kazakov
2018-10-17 21:57 ` Randy Brukardt
2018-10-16 22:33 ` Randy Brukardt
2018-10-17 6:51 ` Niklas Holsti
2018-10-17 22:01 ` Randy Brukardt
2018-10-17 8:17 ` Dmitry A. Kazakov
2018-10-17 22:03 ` Randy Brukardt
2018-10-17 22:10 ` Randy Brukardt
2018-10-18 8:01 ` Dmitry A. Kazakov
2018-10-18 9:33 ` AdaMagica
2018-10-18 21:18 ` Randy Brukardt
2018-10-19 6:27 ` Niklas Holsti
2018-10-19 8:28 ` AdaMagica
2018-10-19 16:38 ` Niklas Holsti
2018-10-14 21:04 ` Niklas Holsti
2018-10-15 7:49 ` Niklas Holsti
2018-10-15 8:55 ` Simon Wright
2018-10-15 10:52 ` Björn Lundin
2018-10-14 23:42 ` Matt Borchers
2018-10-14 23:45 ` Matt Borchers
2018-10-15 9:02 ` Simon Wright
2018-10-15 7:29 ` Dmitry A. Kazakov
2018-10-15 9:05 ` Simon Wright
2018-10-15 16:11 ` Simon Wright
2018-10-15 20:27 ` Randy Brukardt
2018-10-15 5:37 ` Henrik Härkönen
2018-10-15 7:42 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox