c++ - 在 C++ 程序中以编程方式检测字节顺序

标签 c++ algorithm endianness

是否有一种编程方式来检测您是在大端还是小端架构上?我需要能够编写将在 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/

相关文章:

c++ - 浮点字节序?

c++ - 为什么我无法在 CMake 中正确使用 boost?

c++ - 如何创建安装程序文件

c++ - 上下文共享在带有 glfw 和 glew 的 opengl 中不起作用,第二个窗口就像上下文根本不共享

python - 将用户定义的数组设置为 Pyevolve 中的初始个体

c - 是否需要转换字符串的字节顺序?

c++ - 将 'typedef' 从基类传播到 'template' 的派生类

c++ - 基于 std::vector<string> 的内容动态设置顺序的模式

algorithm - 打印到达第 n 个楼梯的方法

c - 为什么 8 位字段具有字节顺序?