https://mp.weixin.qq.com/s/5I5xjX7jqFpKPqeEHvPG8Q
C语言关键字union,通常称为联合体或者共用体,其特性就是所有成员拥有相同的起始地址;
在数据传输的应用中,假如我们需要将一个具体的数值发送到对端,有很多的方法可供我们选择,比如把数值转换成字符串然后传输,对端再将字符串解析成数值是一种方法,其缺点是发送端发送数值前需要将数值格式化成字符串,接收端接收后需要通过相应操作将字符串还原成数值,优点就是调试方便,一眼就能看出发送端发送的数据是否正确;但有没有不需要多余中间过程的方法呢,答案肯定是有的,今天要介绍的就是使用联合体来进行数值传输。
先看下面的一段代码:(假设应用在32位机器)
typedef union {
float f;
uint8_t b[4];
}u_t;
这里联合体内两个成员都占四个字节,拥有相同的起始地址,在内存中使用的同一片内存,我们都知道数据的存储方式是0和1,那么其中一个成员有了值后,其内存里面的01编码对于所有成员来说都是一样的,只是通过不同的解析方式去取值结果不一样而已,假设我们要将1.2345这个浮点数传输到对端,只需要给其中的成员f赋值为1.2345,将成员b发送到对端,对端接收到成员b,取出成员f便得到了传输的数值,这样不需要任何其它的转换及中间过程,非常方便,而且不用担心浮点数的精度问题,唯一需要注意的就是发送端和接收端的大小端模式。