您的位置:首页 > 其它

struct union and endian

2016-09-27 14:12 190 查看
#pragma pack(push, 1)
typedef union {
struct {
# ifdef CS_BIG_ENDIAN
cs_uint16 rsrvd1 :4;
cs_uint16 output_src_sel :3;
cs_uint16 invert_output :1;
cs_uint16 invert_input :1;
cs_uint16 iovddsel_1v2 :1;
cs_uint16 outen_ovr :1;
cs_uint16 outen :1;
cs_uint16 rsrvd2 :2;
cs_uint16 pullup_1k :1;
cs_uint16 pullup_10k :1;

# else /* CS_LITTLE_ENDIAN */
cs_uint16 pullup_10k :1;
cs_uint16 pullup_1k :1;
cs_uint16 rsrvd2 :2;
cs_uint16 outen :1;
cs_uint16 outen_ovr :1;
cs_uint16 iovddsel_1v2 :1;
cs_uint16 invert_input :1;
cs_uint16 invert_output :1;
cs_uint16 output_src_sel :3;
cs_uint16 rsrvd1 :4;

# endif
} bf ;
cs_uint16 wrd ;
} CS4224_GPIO_GPIO1_t;
#pragma pack(pop)

int main()
{
CS4224_GPIO_GPIO1_t gpio_cfg;
gpio_cfg.bf.output_src_sel = 0;
gpio_cfg.bf.invert_output  = 0;
gpio_cfg.bf.invert_input   = 0;
gpio_cfg.bf.iovddsel_1v2   = 0;
gpio_cfg.bf.outen_ovr      = 0;
gpio_cfg.bf.outen          = 1;
gpio_cfg.bf.pullup_1k      = 0;
gpio_cfg.bf.pullup_10k     = 1;

printf("0x%x\n", gpio_cfg.wrd);
return 0;
}


After we execute it in the little endian platform, it will print "0x11";
we can know that the "pullup_10k" field is the first bit of the output data.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: