Re: Byte ordering and array access
- From: "Vladimir S. Oka" <novine@xxxxxxxxxxxxxxx>
- Date: Fri, 10 Feb 2006 20:37:01 +0000 (UTC)
stathis gotsis wrote:
"Benjamin M. Stocks" <stocksb@xxxxxxxx> wrote in message
news:1139413176.945111.100840@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Hello all,
I've heard differing opinions on this and would like a definitive
answer on this once and for all. If I have an array of 4 1-byte
values where index 0 is the least signficant byte of a 4-byte value.
Can I use the arithmatic shift operators to hide the endian-ness of
the underlying processor when assembling a native 4-byte value like
follows:
unsigned int integerValue;
unsigned char byteArray[4];
/* byteArray is populated elsewhere, least signficant byte in index
0, guaranteed */
integerValue = (unsigned int)byteArray[0] |
((unsigned int)byteArray[1] << 8) |
((unsigned int)byteArray[2] << 16) |
((unsigned int)byteArray[3] << 24);
So if byteArray[0] was 0x78, byteArray[1] was 0x56, byteArray[2] was
0x34 and byteArray[3] was 0x12 then would integerValue be 0x12345678
no matter the endian-ness of the processor?
May i ask a question on this? Can the endian-ness of the processor
affect the "<<" shifting direction? From the replies i assume it does.
I need an example where this operator shifts to the right.
No, it does not affect shift "direction". It may help if you think of
shifts as repeated integer divisions/multiplications by 2 (that's how
Standard defines them -- they work on /values/ not representations).
Endianness only affect how values are stored in memory (their bit
representation, if you will). IOW, before performing the shift, C
program reads operand's representation, figures out the /value/,
performs shifting (i.e. division/multiplication), and if required
converts value back to representation, and stores it back.
I don't think you can construct the representation/endinanness
combination that will "reverse" shifts. Or, I'm not at my creative best
at the moment (a distinct possibility -- it's Friday evening, I should
be in a pub).
--
BR, Vladimir
Every improvement in communication makes the bore more terrible.
-- Frank Moore Colby
.
- Follow-Ups:
- Re: Byte ordering and array access
- From: stathis gotsis
- Re: Byte ordering and array access
- References:
- Byte ordering and array access
- From: Benjamin M. Stocks
- Re: Byte ordering and array access
- From: stathis gotsis
- Byte ordering and array access
- Prev by Date: Re: How do i set zero as a Integer?
- Next by Date: Re: Smallest "C" Program !!
- Previous by thread: Re: Byte ordering and array access
- Next by thread: Re: Byte ordering and array access
- Index(es):
Relevant Pages
|