可能重复:
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 */
怎么做? (它必须在执行时完成,而不是在编译时完成......至少我是这么认为的)
答案 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 ();