Подтвердить что ты не робот

Как проверить, является ли система большой эндией или маленькой?

Как проверить, является ли система большой эндией или маленькой endian?

4b9b3361

Ответ 1

В С, C++

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

Смотрите также: Perl версия

Ответ 2

В Python:

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

Ответ 3

Другой код на C, использующий union

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");

Это та же логика, что и Белвуд.

Ответ 4

Если вы используете .NET: проверьте значение BitConverter.IsLittleEndian.

Ответ 5

Однострочный с Perl (который должен быть установлен по умолчанию почти на всех системах):

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

Если вывод начинается с 1 (младший байт), это система с прямым порядком байтов. Если вывод начинается с старшей цифры (старшего байта), это система с прямым порядком байтов. Смотрите документацию модуля Config.

Ответ 6

Решение 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";
}

Ответ 7

В 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 */

Ответ 8

Используя макрос,

const int isBigEnd=1;
#define is_bigendian() ((*(char*)&isBigEnd) == 0)