首页 > 解决方案 > Big-endian 或 Little-endian 对结构成员的影响是什么?

问题描述

给出以下代码片段:

#include <stdio.h>
#include<string.h>
union xyz
{

    int j;
    char b[2];
}y;


int main(void)
{

    y.j=520;
    printf("%d %d",y.b[0],y.b[1]);
    y.b[0]=2;
    printf(" %d ",y.j);
    return 0;

}

对于这段代码,我不知道系统是小端还是大端,如果 yj 是 520,那么我们的表示形式为:

0000001000000100 ,所以 yb[0] 应该是 2 并且 yb[1] 应该是 4 ,但是我得到 yb[0] 为 4 和 yb[1] 为 2 ,我的机器是 little-endian ,但我没有得到架构如何影响 yb[0] 和 yb[1] 的表示?

在我看来,每当我们创建数组时,都没有数组的最高有效字节和数组的最低有效字节,我们有 b[0]、b[1]、b[2] 等索引,那么如何影响数组表示的架构?

请解释 。

标签: cendianness

解决方案


为了安全起见,让我们使用short int,它更有可能是 16 位。

union xyz {
    short int j;
    char b[2];
} y;

所以在你说之后

y.j = 520;

然后y.j看起来像这样:

     +-------------+
y.j: |         520 |
     +-------------+

在大端机器上y.b看起来像这样:

     +------+------+
y.b: | 0x02 | 0x08 |
     +------+------+
        [0]    [1]

在 little-endian 机器上y.b看起来像这样:

     +------+------+
y.b: | 0x08 | 0x02 |
     +------+------+
        [0]    [1]

推荐阅读