C++ 共用体:union
2017-03-23 15:39
148 查看
union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。
其中long、double需要16个字节,而char只需要1个字节,因此该共用体占用16个字节,union的关键是不同的数据类型共用存储器。
实例:
1、确定CPU的模式:大、小端模式确定
大小端不同,则存储方式也存在差别,比如int需要4个字节,而char只需要1个字节,根据一个字节所在的具体位置即可判定CPU的模式
2、实现不同数据之间的类型转换
各种类型的数据共用存储空间,很方便的实现了不同数据类型之间的转换,不需显示的强制类型转换。
3、寄存器的定义,实现整体访问及单项访问
能实现单项和整体的访问,在引入位域操作等相关结构以后,可实现每个bit的访问。
实例http://blog.csdn.net/sodino/article/details/41599931
通信中的数据包会用到共用体。因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。
union student{ char ***; int age; long number; double score; };
其中long、double需要16个字节,而char只需要1个字节,因此该共用体占用16个字节,union的关键是不同的数据类型共用存储器。
实例:
1、确定CPU的模式:大、小端模式确定
大小端不同,则存储方式也存在差别,比如int需要4个字节,而char只需要1个字节,根据一个字节所在的具体位置即可判定CPU的模式
union CPU { int i; char ch; }; void testCPUMode(void) { union CPU Test; Test.i = 1; if(Test.ch == 1) { //小端模式 } else { //大端模式 } }
2、实现不同数据之间的类型转换
各种类型的数据共用存储空间,很方便的实现了不同数据类型之间的转换,不需显示的强制类型转换。
struct register{ char a; char b; char c; char d; }; union Register { struct register; int whole; };
3、寄存器的定义,实现整体访问及单项访问
struct register{ char a; char b; char c; char d; }; union Register { struct register; int whole; };
能实现单项和整体的访问,在引入位域操作等相关结构以后,可实现每个bit的访问。
union UnionData { /*定义一个 共用体*/ int num; struct { /*在 共用体 中定义一个结构*/ char first; char second; } sChar; } uData; //共用体 成员赋值 // 赋值给num 0x4241,由于共用内存,也相当对first赋值0x41,second赋值0x42 // 由ascii码表得:first='A' second='B' uData.num=0x4241; cout << "uData.sChar.first="<< uData.sChar.first << " uData.sChar.second=" << uData.sChar.second << endl;
实例http://blog.csdn.net/sodino/article/details/41599931
通信中的数据包会用到共用体。因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。
相关文章推荐
- C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别
- 【C/C++】C语言中一些容易被人忽略的东西 之三 【共用体、联合、union】
- C++学习笔记(七)--联合/共用体(union)用法
- C++学习笔记之struct和union(结构和共用体)
- C++学习8:共用体union
- C++之union联合/共用体声明、定义和使用详解
- C++ union(联合/共用体)用法 转
- C++学习笔记联合/共用体(union)用法
- 【C/C++】C语言union(联合体 共用体)
- C++ 联合/共用体(union)
- [C++] Union共用体示例讲解
- 从两道经典试题谈C/C++中联合体(union)的使用
- C++中union的应用剖析
- C++中的union 分析
- C/C++联合(Union)浅谈
- C语言共用体union和枚举类型enum
- union可以避免c++的类型检查
- C/C++联合(Union)浅谈
- 如何在C#中模拟C++的联合(Union)?[C#, C++]
- 从两道经典试题谈C/C++中联合体(union)的使用