Как программа C определяет во время RUN (не во время компиляции),
работает ли он на процессорах Little-Endian или Big-Endian?
Причина, по которой это должна быть проверка «во время выполнения», а не «время выполнения», заключается в том, что я собираю программу в универсальном двоичном формате MAC OSX, используя мой MAC с процессором Intel-CPU. Ожидается, что эта программа будет работать на процессорах Intel и Power-PC. то есть, используя универсальный двоичный формат для MAC, я хочу создать программу с использованием процессора Intel и запустить ее под процессором PPC.
Логика в моей программе, которая нуждается в проверке ЦП, - это функция изменения порядка байтов от хоста к сети для 64-битных целых чисел. Прямо сейчас у меня есть это слепо поменять местами порядок байтов, который работает нормально на Intel-CPU, но не работает на PPC. Вот функция C:
unsigned long long
hton64b (const unsigned long long h64bits) {
// Low-order 32 bits in front, followed by high-order 32 bits.
return (
(
(unsigned long long)
( htonl((unsigned long) (h64bits & 0xFFFFFFFF)) )
) << 32
)
|
(
htonl((unsigned long) (((h64bits) >> 32) & 0xFFFFFFFF))
);
}; // hton64b()
Есть ли лучший способ сделать это кроссплатформенным способом?
Спасибо