我正在询问如何判断数组中的一个元素何时完成,另一个元素何时以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的值 . 但是,我'm not sure if there is supposed to an indicator between values that represent an array in memory to show that it'是一个不同的元素,就像一个null char . 喜欢 {01, 23, 45,'\0', FE, DC}
同样对于Little Endian Architecture我相信它会将它存储为 {45,23,01,DC,FE}
,但我不确定是否应该有一些指示器来突出显示数组中的不同元素
2 回答
在little-endian中,字节以最不重要的顺序存储到最重要的位置 . Big-endian恰恰相反 . 例如,
short x=0x1234
将以小端存储为0x34
,0x12
.如前所述,它只影响变量字节的顺序,而不影响每个字节内的位顺序 . 同样,C数组元素的顺序不受字节顺序的影响 .
array[1]
总是在array[0]
之后启动一个sizeof(*array)
.没有这样的指标 .
它实际上是
{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
类型的元素组成 . 如果long
在您的计算机上是4个字节,则每个元素占用4个字节 - 不多也不少 .