字节序

  • 大端字节序

  • 小端字节序

int a = 0x11223344存储方式

  • 大端字节序

地址 内容
低地址 0x11 a[0]
高地址 0x33 a[3]
  • 小端字节序

地址 内容
低地址 0x33 a[3]
高地址 0x11 a[0]

其中a[0]仅仅表示a的一个字节的最高位即0x11,其他类推。

  • 调试 
    定义两个变量:

    int m1 = 0x11223344;
    int m2 = 0x55667788; 
    int a[4] = {0x12,0x34,0x56,0x78};

单步调试进去查看内存情况:

0018FF10  CC CC CC CC CC CC CC CC CC CC CC CC CC CC  烫烫烫烫烫烫烫
0018FF1E  CC CC CC CC CC CC 12 00 00 00 34 00 00 00  烫烫烫....4...
0018FF2C  56 00 00 00 78 00 00 00 88 77 66 55 44 33  V...x...坵fUD3
0018FF3A  22 11 78 FF 18 00 4E 91 44 00 FF FF FF FF  ".x...N慏.....
0018FF48  88 FF 18 00 B9 30 42 00 01 00 00 00 48 13  .....0B.....H.

有上述内存情况分析可得:

  • 变量的存储是从高地址 –> 低地址,即m2的地址 < m1的地址

  • 该系统是小端存储的,如m1的高位0x11存放在高地址处

  • 注意数组的存放是从a[0]放在低地址处

所以,如果有如下枚举体:

union test {
    int i;
    char a[4];
}

union test t;
t.i = 0x11223344;
print("%x\n",t.a[3]);

当运行的系统是小端字节序时,此时的a[3]的值就为0x11了。