float型变量与4个字符型变量相互转化的方法

本文分享了一种在工作中处理float型变量传输的高效方法,即通过定义union实现float到4个字节unsigned char数组的快速转换,避免了传统繁琐的协议。这种方法利用了内存共用的特性,使得数据交换更为便捷。
摘要由CSDN通过智能技术生成

          最近在工作中遇到了一个情况:公司产品中上位机和下位机有时需要传递float型变量。但是公司原有的协议制定起来的很繁琐。float变量在内存中占4个字节,而这个协议用两个字节来定义整数,用两个字节来定义小数,同时还要根据数据正负来定义首位的值。不管是上位机还是下位机在接到数据后,想要使用都要通过一系列的运算,虽然函数写一次以后用就行了,但个人感觉还是挺麻烦的。尤其是要面向新的客户时,要向客户去解释这个操作,都会有点费劲。

        印象中在刚工作的那几年,有一次也用到了float型转4个字符型变量,但是没什么记忆。正好趁现在上网上搜索了一下,看看大家都是如何处理的。总结了一下,貌似是两种,一种是根据float型变量的定义方法,去计算不同的。还有一种是利用共同体(union)去进行转换。第一种我觉的看起来就比较繁琐,我个人倾向于第二种。

        第二种利用的原理很简单,定义一个共同体,共同体的成员分别定义一个float变量,1个4成员的unsigned char数组,由于共同体中的成员占用共同的一段内存。所以当你对float型赋值后,直接取unsigned char数组的值,其实就相当于完成了转化,这是个很巧妙的方法。我用编辑器测试了一下,也是可行的。

#include <stdio.h>
#include <stdlib.h>
float sample=1.234;
union
{
    unsigned char Byte[4];
    float a;
}FloatTo4Bytes;
 
int main()
{
    char i=0;
    FloatTo4Bytes.a=sample;
    for(i=0;i<4;i++)
    {
        printf("Byte%d=0X%X\r\n",i+1,FloatTo4Bytes.Byte[i]);
    }
    return 0;
}

           转换结果如下

 

        可以看到,其实很简单的就完成了转换。整个过程也不复杂。其实工作中经常需要对float型变量也就是小数进行传输,都按照这个方法大家都比较省事。至于是不是有其他我还没考虑到的问题,这个等以后吧,如果遇到了,再来说一说…… 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的笨鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值