扫码关注官方订阅号
RT,这种结构最后一次赋值会把之前的赋值覆盖掉,所以很好奇请问一下这种东西一般应用在什么场景呢?
省内存,方便取高低字节
最初目的就是为了节省内存,你想当初C语言在上个世纪八十年代才开始大规模使用,那时的内存很宝贵的。
可以提供对同一段数据不同的访问接口。。。举个例子,曾经做嵌入式的时候,可以这样写:
// 没有字节对齐,或者字节对齐为1,int 占4字节 typedef union { unsigined int num; struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; } bytes; } Demo;
不过这样写也不太简洁,而且这段代码在 PC 里面和直接通过位移取每一个字节效率是一样的。只是举个例子,不要太纠结。
一般用来判断大小端
在嵌入式开发中用的比较多,我这里给个例子,和上面 @zonxin 的差不多
typedef struct __regular_descriptor_4_high { union { U32 value; struct { U32 raid_id0 : 4; U32 raid_cmd0 : 4; U32 raid_id1 : 4; U32 raid_cmd1 : 4; U32 raid_id2 : 4; U32 raid_cmd2 : 4; U32 raid_id3 : 4; U32 raid_cmd3 : 4; } reg_des_bit; } u; } reg_des_4_high;
要读取整个寄存器可以读value,要写不同的bit-filed就用reg_des_bit来写。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
省内存,方便取高低字节
最初目的就是为了节省内存,你想当初C语言在上个世纪八十年代才开始大规模使用,那时的内存很宝贵的。
可以提供对同一段数据不同的访问接口。。。
举个例子,曾经做嵌入式的时候,可以这样写:
不过这样写也不太简洁,而且这段代码在 PC 里面和直接通过位移取每一个字节效率是一样的。只是举个例子,不要太纠结。
一般用来判断大小端
在嵌入式开发中用的比较多,我这里给个例子,和上面 @zonxin 的差不多
要读取整个寄存器可以读value,要写不同的bit-filed就用reg_des_bit来写。