C++ 共用体:union

union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。

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

通信中的数据包会用到共用体。因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值