Определить системный порядок в одной строке?

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

В настоящее время у меня есть следующая функция для определения системного порядка байтов:

inline bool detectSystemEndianness()
{
int i = 1;
char *c = reinterpret_cast<char*>(&i);
return (c[0] != i);
}

Возвращается false если немного порядковый, true если большой порядок Первый вопрос: эта функция в порядке?

Второй вопрос:
Вместо этой функции я хотел бы инициализировать статическую переменную:

static bool _systemEndianness = /* SOMETHING */

Как это сделать ? (это должно быть сделано во время выполнения, а не во время компиляции … по крайней мере, я так думаю)

1

Решение

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 ();
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector