c++ 中的联合和小字节序

问题描述 投票:0回答:1

我正在使用 C++ 中的联合。

union T
{
    int a;
    char ch;
    short b;
};

int main()
{
    T obj;
    obj.a = 0x12345678;
    std::cout << std::hex << obj.a << std::endl;
    std::cout << std::hex << (int)obj.ch << std::endl;
    std::cout << std::hex << obj.b << std::endl;
}

由于我的处理器是小端字节序(我认为),我希望字节按以下顺序保存在内存中:

78 56 34 12
(从最低有效开始)。为什么我在打印
56 78
时会得到
obj.b
?发生了什么?如果我的系统是大尾数,
obj.ch
将是
12
,但它是
78
。我缺少什么?我预料到了
78 56

c++ union
1个回答
0
投票
int a = 0x12345678
  M0   M1   M2   M3
+----+----+----+----+
| 78 | 56 | 34 | 12 |
+----+----+----+----+

short b = 0x5678
  M0   M1
+----+----+
| 78 | 56 |
+----+----+

char ch = 0x78
  M0
+----+
| 78 |
+----+
© www.soinside.com 2019 - 2024. All rights reserved.