在一行中检测系统字节序?

时间:2012-09-25 21:40:42

标签: c++ endianness

  

可能重复:
  Detecting endianness programmatically in a C++ program
  C Macro definition to determine big endian or little endian machine?

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

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

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

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

static bool _systemEndianness = /* SOMETHING */

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

1 个答案:

答案 0 :(得分: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 ();