是否有一种编程方式来检测您是在大端还是小端架构上?我需要能够编写将在 Intel 或 PPC 上执行的代码系统并使用完全相同的代码(即没有条件编译)。
最佳答案
我不喜欢基于类型双关的方法——编译器经常会警告它。这正是 union 的用途!
bool is_big_endian(void)
{
union {
uint32_t i;
char c[4];
} bint = {0x01020304};
return bint.c[0] == 1;
}
原理等同于其他人建议的类型案例,但这更清楚 - 根据C99 , 保证正确。与直接指针转换相比,GCC 更喜欢这种方式。
这也比在编译时修复字节序要好得多 - 对于支持多架构的操作系统(例如 Mac OS X 上的胖二进制文件),这对 ppc/i386 都适用,但很容易搞砸否则事情会发生。
关于c++ - 在 C++ 程序中以编程方式检测字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001307/