Портативный/стандартный способ определения endianness во время компиляции
Не помещайте это как дубликат. предлагаемый дублирующий пост фактически говорил о принятии RUNTIME. И, самое главное, ни один из ответов не отвечает на мой вопрос.
Мне нужно прочитать a uint16_t
из двух байтов в C/С++. Итак, мне нужно решить, в каком формате находится финальный формат платформы, с которой компилируется мой код. Я использую макросы в расширение GNU C.
// 'size' is 'uint16_t' and read from big-endian format.
// So if the platform is little-endian, I need to flip the btyes.
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
size = ( size << 8 ) | ( size >> 8 );
#endif
Производительность имеет решающее значение в моем случае использования, поэтому ntohs
или htons
для меня не вариант. Мне нужно проверить этот endian во время предварительной обработки.
Вопрос. Существует ли стандартный способ (языковой стандарт) для этой предварительной обработки?