2015年5月19日 星期二

struct 宣告 在big_endian 和 little_endian 上的排列

若是以bit 為單位在
big_endian : struct 由上而下 在記憶體的位置則是以bits為單位  由高位排至低位
little_endian :struct 由上而下 在記憶體的位置以1byte 為單位  由最高位byte的最低位bit開始 往記憶體低位排



以ipv6 addr packet 的前4個byte  為例 (from wiki)

例子如下:
#ifdef _BIG_ENDIAN
uint32 version:4;
uint32 tclassH:4;

uint32 tclassL:4;
uint32 flow_lblH:4;

uint32 flow_lblL:16;
#elif  _LITTLE_ENDIAN
uint32 tclassH:4;
  uint32 version:4;

uint32 flow_lblH:4;
uint32 tclassL:4;

uint32 flow_lblL:16;
#endif

其中big_endian 其實也可以寫的更簡潔
uint32 version:4;
uint32 tclass:8;
uint32 flow_lblL:20;