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

Как я могу найти Endian-ness моего ПК программно с помощью C?

Возможный дубликат:
Обнаружение цели в программном обеспечении на С++

Есть ли какая-либо функция библиотеки, чтобы найти конечную версию моего ПК?

4b9b3361

Ответ 1

Зачем вам нужна библиотека, если вы можете найти ее так?:)

int num = 1;

if (*(char *)&num == 1)
{
    printf("Little-Endian\n");
}
else
{
    printf("Big-Endian\n");
}

Ответ 2

Мне не известно о библиотечной функции.

Вы можете получить адрес целого числа, а затем обработать этот адрес как указатель символа и записать данные в байты, которые составляют целое число. Затем зачитайте, что на самом деле находится в целых числах, и посмотрите, получится ли результат в соответствии с архитектурой большого конца или немного endian.

Ответ 3

используйте этот код:

union 
{
    uint8  c[4];
    uint32 i;
} u;

u.i = 0x01020304;

if (0x04 == u.c[0])
    printf("Little endian\n");
else if (0x01 == u.c[0])
    printf("Big endian\n");

Ответ 4

Нет стандартной функции для этого (как в стандарте C, так и в стандарте POSIX).

Если ваш компьютер (ПК под Windows) работает под управлением Intel, он малозначен.

Если вы хотите найти порядок байтов на своем компьютере, вы можете использовать не полностью определенное поведение (но обычно это работает - я не слышал нигде, что он не работает) этой техники:

enum { BigEndian, LittleEndian };

int endianness(void)
{
    union
    {
        int  i;
        char b[sizeof(int)];
    } u;
    u.i = 0x01020304;
    return (u.b[0] == 0x01) ? BigEndian : LittleEndian;
}

Этот код предполагает 32-разрядный тип int (а не 64-разрядный или 16-разрядный).