I am inquiring about how to tell when one element in an array has finished and another is beginning in an endian architecture.
I have 2 arrays where the size of long
is 8 and the size of char
is 1
long x[2] = {0x012345,0xFEDC};
char c[12] = {'a','b','c','d','e','f','g','h','0','1','2','3'};
And I was wondering how these values would be stored in the different Endian architectures if we consider x
starting at memory address 0x100
and c
starting at memory address 0x200
.
I thought that the Big Endian address would be {01,23,45,FE,DC}
where the first element of the set is at memory address 0x100
, the next is 0x101
, third is 0x102
, and so on since it stores the values based on the MSB being first. However, I'm not sure if there is supposed to be an indicator between values that represent an array in memory to show that it's a different element, like '\0'
(null char). like {01, 23, 45,'\0', FE, DC}
Likewise for the Little Endian Architecture I believe it would store it as {45,23,01,DC,FE}
, but I am not sure whether there should be some indicator to highlight the different elements in the array
In little-endian, the bytes are stored in the order least significant to most signficant. Big-endian is the opposite. For instance, short x=0x1234
would be stored as 0x34
,0x12
in little-endian.
As already mentioned, it only affects the order of the bytes of a variable, and not the order of bits inside each byte. Likewise, the order of the elements of a C array are unaffected by endianness. array[1]
always starts one sizeof(*array)
after array[0]
.
However, I'm not sure if there is supposed to an indicator between values that represent an array in memory to show that it's a different element, like a null char.
There is no such indicator.
{01,23,45,FE,DC}
{45,23,01,DC,FE}
It would actually be
{00,00,00,00,00,01,23,45, 00,00,00,00,00,00,FE,DC}
and
{45,23,01,00,00,00,00,00, DC,FE,00,00,00,00,00,00}
because long
s take 8 bytes.