首页 > 解决方案 > 根据机器的字节序定义宏

问题描述

我想根据机器的字节序在结构中定义变量,这就是我尝试过的

#define IS_BIG_ENDIAN (!(union { uint16_t u16; unsigned char c; }){ .u16 = 1 }.c)
//#define IS_BIG_ENDIAN (!*(unsigned char *)&(uint16_t){1})
struct A {
    #if IS_BIG_ENDIAN
    char a:4;
    char b:4;
    #else
    char b:4;
    char a:4;
    #endif
}

上面的代码给出了错误,这可能实现吗?我的主要目标是实现结构变量的逆序。

标签: c++c++11endianness

解决方案


来自https://sourceforge.net/p/predef/wiki/Endianness/

你没有标准的方式来拥有它。

但自定义标头<sys/param.h><endian.h>可能提供 MACRO,例如:

Type                            Macro           Value
Big endian                      __BYTE_ORDER    __BIG_ENDIAN
Little endian                   __BYTE_ORDER    __LITTLE_ENDIAN
Little endian (word-swapped)    __BYTE_ORDER    __PDP_ENDIAN

推荐阅读