#include <iostream>
using namespace std;
bool little_endian()
{
static const union LittleEndian
{
unsigned short us;
unsigned char uc[sizeof(unsigned short)];
LittleEndian() : us(0x0001) { }
inline operator bool () const { return(0x01 == uc[0]); }
} le;
return(le);
}
int main(int argc, char * argv[])
{
cout << (little_endian() ? "little endian" : "big endian") << endl;
return(0);
}
也许只是花稍些。。。
修改下:
#include <iostream>
using namespace std;
bool little_endian()
{
static const struct Outer
{
const union inner
{
unsigned short us;
unsigned char uc[sizeof(unsigned short)];
inner() : us(0x0001) { }
} un;
const bool bo;
Outer() : un(), bo(0x01 == un.uc[0]) { }
inline operator bool () const { return(bo); }
} st;
return(st);
}
int main(int argc, char * argv[])
{
cout << (little_endian() ? "little endian" : "big endian") << endl;
return(0);
}
还是平凡点吧:
#include <iostream>
using namespace std;
bool little_endian()
{
static const unsigned short us = 0x0001;
static const unsigned char * puc = (const unsigned char *)&us;
static const bool is_little_endian = (0x01 == *puc);
return(is_little_endian);
}
int main(int argc, char * argv[])
{
cout << (little_endian() ? "little endian" : "big endian") << endl;
return(0);
}