union使用

版权声明:本文为博主原创文章,欢迎指点!!! https://blog.csdn.net/allen807733144/article/details/80234541

在can网络中,解析can数据可能最简单的方法就是用union了

类struct但又不一样,我们在解析、读取can数据时显得不要太方便

可以先看这里

用法如下:

	union un_demo{
		struct {
			unsigned char n1 : 2;
			unsigned char n2 : 6;
			unsigned char n3;
			unsigned char n4 : 1;
		}st_demo;
		unsigned char n[3];
	};

看这个结构实际已经很明确了,可以理解为union中,这两个对应的数据一样。

解析即:赋值给n数组,则其他可直接取值

要想获得整个数据,则对应的数据项赋值完成后,直接取数组即可。

表面可以这么理解,实际为什么呢?

联合体也叫共用体,即在内存中定义的不同数据类型共享同一段内存,这已经很明显了

union  foo{ /*“共用”类型“FOO”*/
 
     int  i;     /*“整数”类型“i”*/
     char  c;    /*“字符”类型“C”*/
     double  k;   /*“双”精度类型“K”*/
};

最大长度多少呢?没错,就是double的长度

下面这个呢?

union  foo{ /*“共用”类型“FOO”*/
 
     char  s[10];     /*“字符”类型的数组“S”下面有“10”个元素*/
         int  i;         /*“整数”类型i*/
};
这个是12,int的整数倍,比10大即12.若改为double,则是16,double(8)明显不够,则*2.
需要注意的地方:

对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了;

,共用体只存放了一个被选中的成员


猜你喜欢

转载自blog.csdn.net/allen807733144/article/details/80234541