如何检查系统是大端还是小端?

如何检查系统是大端还是小端?

在C,C ++中

int n = 1; // little endian if true if(*(char *)&n == 1) {...} 

另见: Perl版本

在Python中:

 from sys import byteorder print(byteorder) 

另一个C代码使用联合

 union { int i; char c[sizeof(int)]; } x; xi = 1; if(xc[0] == 1) printf("little-endian\n"); else printf("big-endian\n"); 

贝伍德使用的是同样的逻辑。

如果您使用.NET:请检查BitConverter.IsLittleEndian的值。

一个C ++解决scheme:

 namespace sys { const unsigned one = 1U; inline bool little_endian() { return reinterpret_cast<const char*>(&one) + sizeof(unsigned) - 1; } inline bool big_endian() { return !little_endian(); } } // sys int main() { if(sys::little_endian()) std::cout << "little"; } 

在Linux中,`

 static union { char c[4]; unsigned long mylong; } endian_test = { { 'l', '?', '?', 'b' } }; #define ENDIANNESS ((char)endian_test.mylong) if (ENDIANNESS == 'l') /* little endian */ if (ENDIANNESS == 'b') /* big endian */ 

Perl的单行程(几乎所有系统都应该默认安装):

 perl -e 'use Config; print $Config{byteorder}' 

如果输出以1(最低有效字节)开始,则它是一个小端系统。 如果输出从一个更高的数字开始(最重要的字节),这是一个大端系统。 请参阅configuration模块的文档。