我正在使用 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
。
int a = 0x12345678
M0 M1 M2 M3
+----+----+----+----+
| 78 | 56 | 34 | 12 |
+----+----+----+----+
short b = 0x5678
M0 M1
+----+----+
| 78 | 56 |
+----+----+
char ch = 0x78
M0
+----+
| 78 |
+----+