联合体的正确使用方式
2018-02-24 16:53
211 查看
工作半年多了,一直还没用到union类型,所以一直是认为union没有什么特别的用处,甚至感觉没有存在的意义。直到有一天看到了union和位段一起使用时,才发现这才是”正确的打开方式“,union不是没用,而是一但用到,都是一些高级用法。先看看union是怎么和位段连用的。typedef struct
{
unsigned char DISTANCE :8; //[0]
unsigned char SPEED_H :8;//[1] ,速度的高位字节
unsigned char SPEED_L :2; //速度的低位字节
unsigned char ACCELERATE_H :6;//[2]
unsigned char ACCELERATE_L :8;//[3]
}obj_information_t;
typedef union
{
unsigned char DATA[4];
obj_information_t INFORMATION;
}obj_information_u;
obj_information_u obj_info_pre;
obj_information_u obj_info_current;
obj_info_current.DATA = obj_info_pre.DATA;//这样在赋值的时候就可以清晰的知道,变量占用的内存多大
还在网上看到了更高级的用法,就是用联合体对数据进行位操作,推荐程序员们都看一下,链接http://blog.csdn.net/xiaoliu0518/article/details/31785083typedef struct{
uchar bit0:1;
uchar bit1:1;
uchar bit2:1;
uchar bit3:1;
uchar bit4:1;
uchar bit5:1;
uchar bit6:1;
uchar bit7:1;
}bits;
typedef union{
uchar data_char;
bits data_bits;
}utype;
uchar *addr = (uchar*)0x10;
utype value;
value.data_char = *addr;
如果要查看某个位比如第3位
直接看 value.data_bits.bit3就可以了。
如果要设置某个位,比如设置第0位为1,第7位为0
value.data_bits.bit0 = 1;
value.data_bits.bit7 = 0;
*addr = value.data_char;
{
unsigned char DISTANCE :8; //[0]
unsigned char SPEED_H :8;//[1] ,速度的高位字节
unsigned char SPEED_L :2; //速度的低位字节
unsigned char ACCELERATE_H :6;//[2]
unsigned char ACCELERATE_L :8;//[3]
}obj_information_t;
typedef union
{
unsigned char DATA[4];
obj_information_t INFORMATION;
}obj_information_u;
obj_information_u obj_info_pre;
obj_information_u obj_info_current;
obj_info_current.DATA = obj_info_pre.DATA;//这样在赋值的时候就可以清晰的知道,变量占用的内存多大
还在网上看到了更高级的用法,就是用联合体对数据进行位操作,推荐程序员们都看一下,链接http://blog.csdn.net/xiaoliu0518/article/details/31785083typedef struct{
uchar bit0:1;
uchar bit1:1;
uchar bit2:1;
uchar bit3:1;
uchar bit4:1;
uchar bit5:1;
uchar bit6:1;
uchar bit7:1;
}bits;
typedef union{
uchar data_char;
bits data_bits;
}utype;
uchar *addr = (uchar*)0x10;
utype value;
value.data_char = *addr;
如果要查看某个位比如第3位
直接看 value.data_bits.bit3就可以了。
如果要设置某个位,比如设置第0位为1,第7位为0
value.data_bits.bit0 = 1;
value.data_bits.bit7 = 0;
*addr = value.data_char;
相关文章推荐
- iOS - Masonry的正确使用方式
- qt 线程 正确使用方式
- Linux下使用java -jar运行可执行jar包的正确方式
- 异常使用原理--异常的正确打开方式
- 您的网页浏览器已阻止此站点以不安全的方式打开使用Active控件。因此,此页可能显示不正确
- Linux下使用java -jar运行可执行jar包的正确方式
- volley的正确使用方式
- SiteMap 提交,并使用正确的方式提交给搜索引擎
- 使用Gson解析json格式的字符串的正确方式
- teamcity执行jmeter脚本使用Executable with parameters方式不能正确运行解决思路
- 尝试向 URI“ ”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务...。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。
- 关于urllib2.open的正确使用方式
- 使用SpringJDBC的正确开启方式
- 查看 MySQL 表使用的存储引擎--正确方式 以及修改存储引擎的方式
- Android中的内存管理机制以及正确的使用方式
- Python24中使用urllib时遇到IOError的正确打开方式
- PorterDuffXfermode 正确使用方式(详解)
- 阿里巴巴iconfont的正确使用方式
- iOS9中使用提示框的正确实现方式
- jQuery.getJSON跨域访问的正确使用方式(史上最傻瓜式解释)