IEEE754标准下浮点数与十六进制数据转换

在工作中遇到了在IEEE754标准下将十六进制数据转为浮点数,在网上没看到相关的代码,因此在此处记录一下。下面是传感器传输的四组数据:

1.第一种方式是按照位操作的方式,对接收的数据进行移位和乘除最后还原成float型数据,代码如下:

float Byte_To_flaot(unsigned char *buf)
{
	unsigned char s;			//符号位 
	unsigned char DataEx,data1,data2;		//指数位
	unsigned char M=0; 
	float sum1=0,sum2=0,sum3=0;
	float sum=0;
	unsigned char b,c,d;
	int buffer=0;
	unsigned char buf1=0;		//清除s位 
	s=buf[0]>>7;
    DataEx=(buf[0]<<1)+(buf[1]>>7);
    M=DataEx-127;
    buf[1]=buf[1]&0x7F;    //清空e0位 
    for(unsigned char i=0;i<8;i++)
    {
    	b=(buf[1]&(0x80>>i))>>(7-i);
    	c=(buf[2]&(0x80>>i))>>(7-i);
    	d=(buf[3]&(0x80>>i))>>(7-i);

    	sum1+=b*pow(2,M-i)+c*pow(2,M-i-8)+d*pow(2,M-i-16); 
	}
	sum=sum1+pow(2,M);
	if (s == 1)  sum=-sum;
	return sum;
}

2.第二种方式更为简单,采用联合体就可以了。

首先定义一个如下的联合体:

typedef union {
    unsigned char s[4];
	float rec;
}Ubytefloat;

然后将接收的四组数据赋给联合体当中的数组就可以了,但是要注意一下赋值的顺序:

比如21.6对应的十六进制就是四组数据0x41,0xac,0xcc,0xcc。这里需要将0xcc赋值给s[0],0xcc赋值给s[1],0xac赋值给s[2],0x41赋值给s[3]。即数组的四个程序和四组数据是倒着对应的。

将数据填入数组后,直接读取float成员即可获得转换后的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值