Проверка порядка байтов с помощью препроцессора - PullRequest
2 голосов
/ 29 октября 2011

Я нашел следующий код для проверки состояния порядка байтов.Он работает с VS C ++:

#if '1234' != 0x31323334
#  define BIG_ENDIAN
#endif

Я не знаю, работает ли он с другими компиляторами.Я бы спросил, если это стандартный код?

1 Ответ

2 голосов
/ 29 октября 2011

Символьная константа с более чем одним символом, например '1234', имеет значение, определяемое реализацией. Нет абсолютно никаких гарантий относительно связи между значением '1234' и порядком байтов системы.

Препроцессору просто не хватает информации для определения порядка байтов в целевой системе.

И имейте в виду, что big-endian и little-endian не единственные возможности. Для 4-байтового целочисленного типа существует 24 (4 факторных) возможных порядка байтов. Все они разрешены языком, и по крайней мере 3 из них были использованы на реальных машинах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...