2

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

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

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

false如果是小端,如果是大端,则返回true。第一个问题:这个功能可以吗?

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

static bool _systemEndianness = /* SOMETHING */

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

4

1 回答 1

0

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 ();
于 2012-09-25T21:46:22.910 回答