How are array values stored in Little Endian vs. B

2019-05-18 17:50发布

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 an indicator between values that represent an array in memory to show that it's a different element, like a 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

2条回答
The star\"
2楼-- · 2019-05-18 18:24

Array elements in C are fixed size. That means that each element takes up exactly the number of bytes required by its type. In your example, x consists of two elements of type long. If long is 4 bytes on your computer, then each element takes up 4 bytes—no more, no less.

查看更多
再贱就再见
3楼-- · 2019-05-18 18:25

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 longs take 8 bytes.

查看更多
登录 后发表回答