Ton*_*ion 3 c++ unions type-punning
我在这里读到这个关于决定字节序的问题,第一个答案让我感到困惑.
用于决定大字节序的代码如下:
int is_big_endian(void)
{
union {
uint32_t i;
char c[4];
} bint = {0x01020304};
return bint.c[0] == 1;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这里的编译器如何决定用于该十六进制数字数组的类型?因为从技术上讲它同样适用于那个uint32_t或那个char[4].
为什么不把它存放在char[4]跳过union?
这里有一些union我看不到的优势吗?我知道这被称为打字,但我没有看到它的优势.
我的问题是这里的编译器如何决定用于该十六进制数字数组的类型?
与数组和聚合类一样,第一个初始化器初始化第一个成员; 在这种情况下i.(当然,与那些东西不同,拥有多个初始化器是没有意义的).
为什么不将它存储在char [4]中并跳过联合?在这里,我看不到一个工会的优势吗?
这样做的目的是初始化4字节整数,然后使用该char数组检查各个字节以确定内存顺序.如果最重要的byte(0x01)存储在第一个字节中,那么系统是"big-endian"; 否则它是"小端"(或者可能是一些陌生人).