首页 文章

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

提问于
浏览
2

我正在询问如何判断数组中的一个元素何时完成,另一个元素何时以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 回答

  • 6

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

    如前所述,它只影响变量字节的顺序,而不影响每个字节内的位顺序 . 同样,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个字节 .

  • 5

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

相关问题