如何在Little Endian与Big Endian架构中存储数组值

我正在询问如何判断数组中的一个元素何时完成,另一个元素何时以endian体系结构开始。

我有2个数组,其中long的大小为8,char的大小为1

long x[2] = {0x012345,0xFEDC};

char c[12] = {'a','b','c','d','e','f','g','h','0','1','2','3'};

我想知道如果我们考虑x从内存地址0x100开始并且c从内存地址0x200开始,这些值将如何存储在不同的Endian架构中。

我认为Big Endian地址是{01,23,45,FE,DC} ,其中集合的第一个元素是内存地址0x100 ,下一个是0x101 ,第三个是0x102 ,依此类推,因为它存储了值基于MSB是第一个。 但是,我不确定是否应该在表示内存中的数组的值之间有一个指示符,以表明它是一个不同的元素,如null char。 像{01, 23, 45,'\0', FE, DC}

同样对于Little Endian Architecture我相信它会将它存储为{45,23,01,DC,FE} ,但我不确定是否应该有一些指示器来突出显示数组中的不同元素

在little-endian中,字节以最不重要的顺序存储到最重要的位置。 Big-endian恰恰相反。 例如, short x=0x1234将以little-endian的forms存储为0x34

如前所述,它只影响变量字节的顺序,而不影响每个字节内的位顺序。 同样,C数组元素的顺序不受字节顺序的影响。 array[1]总是在array[0]之后启动一个sizeof(*array)

但是,我不确定是否应该在表示内存中的数组的值之间有一个指示符,以表明它是一个不同的元素,如null char。

没有这样的指标。

{01,23,45,FE,DC}

{45,23,01,DC,FE}

它实际上是

{00,00,00,00,00,01,23,45, 00,00,00,00,00,00,FE,DC}

{45,23,01,00,00,00,00,00, DC,FE,00,00,00,00,00,00}

因为long s需要8个字节。

C中的数组元素是固定大小的 。 这意味着每个元素完全占用其类型所需的字节数。 在您的示例中, x由两个long类型的元素组成。 如果计算机上有4个字节long ,则每个元素占用4个字节 – 不多也不少。