当前位置:   article > 正文

计算机IEEE754转浮点数_ieee754 c++二进制转化为浮点数

ieee754 c++二进制转化为浮点数

前言

前几天进行对一个模块的研究,发现他串口传输过来的是16进制数,而我们需要浮点数值,显然需要一定的转换方式,一开始我还以为是需要特殊的计算方法,后来这才接触到了IEEE这个浮点数的存储方法
之前我的老师也没接触过这个,但是这是一个存储标准,以后用处应该会很多

概述

EEE 754 标准是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号[1] ,等同于国际标准ISO/IEC/IEEE 60559[2] 。该标准由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会(Microprocessor Standards Committee, MSC)发布。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的「浮点数运算子」;它也指明了四种数值修约规则和五种例外状况(包括例外发生的时机与处理方式)

计算方式

废话不多说,下面给上C语言中的IEEE转浮点数的方法,理论上其他语言也可以用:

在普通C语言下转换:

因为其实在计算机中,浮点数就是按照IEEE的16进制存储在内存中的,所以转换很简单

#include <stdio.h>
#include <String.h>
#define uint8 unsigned int
typedef union                                        
{
   float ul_Temp;
   uint8  uc_Buf[4];
   .
}un_DtformConver;

un_DtformConver   DtformConver;
uint8 i;
int il_Temp32;
float f_Temp;
char uartbuf[30];


int main(){

    //long int temp = b[0]*0x10*0x10+b[1]*0x10*0x10+b[2]*0x10*0x10+b[3]*0x10*0x10;
    //il_Temp32 = 0x4247FAE4;        //实际十进制值是220
    memset((uint8 *)&DtformConver.uc_Buf[0],0,4);
    for(i=0;i<4;i++){
        DtformConver.uc_Buf[i] = (uint8)(il_Temp32>>(i*8));
    }   
    f_Temp = DtformConver.ul_Temp;
    printf("%.2f",f_Temp);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/258404
推荐阅读
  

闽ICP备14008679号