我正在询问如何判断数组中的一个元素何时完成,另一个元素何时以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}
,但我不确定是否应该有一些指示器来突出显示数组中的不同元素
答案 0 :(得分:6)
在little-endian中,字节以最不重要的顺序存储到最重要的位置。 Big-endian恰恰相反。例如,short x=0x1234
将以0x34
,0x12
存储在little-endian中。
如前所述,它只影响变量字节的顺序,而不影响每个字节内的位顺序。同样,C数组元素的顺序不受字节顺序的影响。 array[1]
总是在sizeof(*array)
之后array[0]
开始{。}}。
但是,我不确定是否应该有一个指标 表示内存中数组的值,表明它是不同的 元素,就像一个空字符。
没有这样的指标。
{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
占用8个字节。
答案 1 :(得分:5)
C中的数组元素是固定大小。这意味着每个元素完全占用其类型所需的字节数。在您的示例中,x
由两个类型为long
的元素组成。如果long
在您的计算机上是4个字节,则每个元素占用4个字节 - 不多也不少。