web-dev-qa-db-ja.com

システムがビッグエンディアンかリトルエンディアンかを確認する方法は?

システムがビッグエンディアンかリトルエンディアンかを確認する方法は?

51
anand

C、C++では

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

参照: Perlバージョン

66
belwood

Pythonの場合:

from sys import byteorder
print(byteorder)
# will print 'little' if little endian
25
Nikita Pestrov

ユニオンを使用する別のCコード

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

ベルウッドが使用したのと同じロジックです。

10
Neeraj

.NETを使用している場合:BitConverter.IsLittleEndianの値を確認します。

7
Guffa

Perlを使用したワンライナー(ほぼすべてのシステムにデフォルトでインストールする必要があります):

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

出力が1(最下位バイト)で始まる場合、リトルエンディアンシステムです。出力が上位桁(最上位バイト)で始まる場合、それはビッグエンディアンシステムです。 Config モジュールのドキュメントを参照してください。

5
weibeld

C++ソリューション:

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";
}
1
Galik

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 */
1
Rigel Hsu