Отредактировано: я вижу, что cmake
имеет скрипт TestBigEndian.cmake
, но он выполняет компиляцию и тестовый прогон, чтобы определить, является ли система Big Endian или нет, а это не то, что вы хотите.
Вы можете проверить порядковый номер системы в своей собственной программе с помощью функции, подобной этой.
bool isLittleEndian()
{
short int number = 0x1;
char *numPtr = (char*)&number;
return (numPtr[0] == 1);
}
В основном создайте целое число и прочитайте его первый байт (младший байт). Если этот байт равен 1, то система имеет младший порядок байтов, в противном случае это большой порядок байтов.
Однако это не позволяет вам определять порядок байтов до времени выполнения.
Если вы хотите определить время выполнения системы, то я не вижу большой альтернативы, кроме как «построить тестовую программу, а затем скомпилировать мою настоящую программу», например, cmake
или выполнять исчерпывающие проверки для конкретных макросов, определенных компиляторами например, __BIG_ENDIAN__
в GCC 4.x.
ОБНОВЛЕНО Возможно, вы захотите взглянуть на собственный Boost endian.hpp
в качестве примера.
http://www.boost.org/doc/libs/1_43_0/boost/detail/endian.hpp