//字节转为浮点数

float ByteToFloat(unsigned char m[])

{

 // 求符号位
 float sig = 1.;
 if (m[3] >=128.)
  sig = -1.;
 //求阶码
 float jie = 0.;
 if (m[3] >=128.)
 {
  jie = m[3]-128.  ;
 }
 else
 {
  jie = m[3];
 }
 jie = jie * 2.;
 if (m[2] >=128.)

  jie += 1.;
 jie -= 127.;
 //求尾码
 float tail = 0.;
 if (m[2] >=128.)
  m[2] -= 128.;
 tail =  m[0] + (m[1] + m[2] * 256.) * 256.;
 tail  = (tail)/8388608;   //   8388608 = 2^23
 float f = sig * pow(2.0f, jie) * (1+tail);
 return f;

}

//浮点数到十六进制转换

void FloatToByte(float floatNum,unsigned char* byteArry)
{
 char* pchar=(char*)&floatNum;
 for(int i=0;i<sizeof(float);i++)
 {
  *byteArry=*pchar;
  pchar++;
  byteArry++;

 }
}

使用方法

int _tmain(int argc, _TCHAR* argv[])
{

 float c=70.0;
 unsigned char bcd[4]="";
 FloatToByte(c,bcd);
 printf("%x %x %x %x\r\n",bcd[0],bcd[1],bcd[2],bcd[3]);

 char* pchar=(char*)&c;
 float e=ByteToFloat(bcd);
 printf("%.1f",e);
 return 0;
}

输出结果

0 0 8c 42
70.0



注意:本文归作者所有,未经作者允许,不得转载