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

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

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

Почему вам нужна библиотека, если вы можете найти ее так? 🙂

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

Я не знаю о библиотечной функции.

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

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

 union { uint8 c[4]; uint32 i; } u; ui = 0x01020304; if (0x04 == uc[0]) printf("Little endian\n"); else if (0x01 == uc[0]) printf("Big endian\n"); 

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

Если ваш ПК – это компьютер под управлением Windows, работающий под управлением Intel, он малоподобен.

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

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

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