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

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便得到了传输的数值,这样不需要任何其它的转换及中间过程,非常方便,而且不用担心浮点数的精度问题,唯一需要注意的就是发送端和接收端的大小端模式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值