Возможный дубликат:
Обнаружение порядка байтов программно в программе на C ++
C Макроопределение для определения машины с прямым или прямым порядком байтов?
В настоящее время у меня есть следующая функция для определения системного порядка байтов:
inline bool detectSystemEndianness()
{
int i = 1;
char *c = reinterpret_cast<char*>(&i);
return (c[0] != i);
}
Возвращается false
если немного порядковый, true
если большой порядок Первый вопрос: эта функция в порядке?
Второй вопрос:
Вместо этой функции я хотел бы инициализировать статическую переменную:
static bool _systemEndianness = /* SOMETHING */
Как это сделать ? (это должно быть сделано во время выполнения, а не во время компиляции … по крайней мере, я так думаю)
2 способа
1) Имейте препроцессор, который вы определяете для различных платформ, чтобы вы могли работать с различными порядками байтов во время компиляции, а не во время выполнения (значительно быстрее, но сложнее в реализации, не зная всех платформ)
2) похоже на вашу функцию:
inline bool isLittleEndian()
{
static const int i = 1;
static const char* const c = reinterpret_cast<const char* const>(&i);
return (*c == 1);
}
...
static const bool _systemEndianness = isLittleEndian ();
Других решений пока нет …