C语言关键字union在数据传输中的妙用

来源:漫长当下 嵌入式 25 次阅读
摘要:C语言关键字union,通常称为联合体或者共用体,其特性就是所有成员拥有相同的起始地址; 在数据传输的应用中,假如我们需要将一个具体的数值发送到对端,有很多的方法可供我们选择,比如把数值转换成字符串然后传输,对端再将字符串解析成数值是一种方法,其缺点是发送端发送数值前需要将数值格式化成字符串,接收端接收后需要通过相应操作将字符串还原成数值,优点就是调试方便,一眼就能看出发送端发送的数据是否正确;但

C语言关键字union,通常称为联合体或者共用体,其特性就是所有成员拥有相同的起始地址;

在数据传输的应用中,假如我们需要将一个具体的数值发送到对端,有很多的方法可供我们选择,比如把数值转换成字符串然后传输,对端再将字符串解析成数值是一种方法,其缺点是发送端发送数值前需要将数值格式化成字符串,接收端接收后需要通过相应操作将字符串还原成数值,优点就是调试方便,一眼就能看出发送端发送的数据是否正确;但有没有不需要多余中间过程的方法呢,答案肯定是有的,今天要介绍的就是使用联合体来进行数值传输。

先看下面的一段代码:(假设应用在32位机器)

typedef union {     float f;     uint8_t b[4]; }u_t;

这里联合体内两个成员都占四个字节,拥有相同的起始地址,在内存中使用的同一片内存,我们都知道数据的存储方式是0和1,那么其中一个成员有了值后,其内存里面的01编码对于所有成员来说都是一样的,只是通过不同的解析方式去取值结果不一样而已,假设我们要将1.2345这个浮点数传输到对端,只需要给其中的成员f赋值为1.2345,将成员b发送到对端,对端接收到成员b,取出成员f便得到了传输的数值,这样不需要任何其它的转换及中间过程,非常方便,而且不用担心浮点数的精度问题,唯一需要注意的就是发送端和接收端的大小端模式。

相关推荐
评论区

登录后即可参与讨论

立即登录