在一行中检测系统字节序

Detect system endianness in one line?

本文关键字:检测系统 字节 一行      更新时间:2023-10-16

可能的重复项:
在C++程序中
以编程方式检测字节序 C 宏观定义确定大端还是小端机?

目前,我有以下功能来检测系统字节序:

inline bool detectSystemEndianness()
{
    int i = 1;
    char *c = reinterpret_cast<char*>(&i);
    return (c[0] != i);
}

如果小端,它返回false,如果大端,则返回true。第一个问题:这个函数可以吗?

第二个问题:我想初始化一个静态变量,而不是这个函数:

static bool _systemEndianness = /* SOMETHING */

怎么办呢?(它必须在执行时完成,而不是在编译时完成......至少我是这么认为的)

2 种方式

1)为各种平台定义一个预处理器,这样您就可以在编译时而不是运行时对各种字节序进行操作(速度明显更快,但在不知道所有平台的情况下更难实现

2)类似于你的函数:

inline bool isLittleEndian()
{
    static const int i = 1;
    static const char* const c = reinterpret_cast<const char* const>(&i);
    return (*c == 1);
}
...
static const bool _systemEndianness = isLittleEndian ();