如何检查系统是大端还是小端?
如何检查系统是大端还是小端?
在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模块的文档。