//字节转为浮点数
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
注意:本文归作者所有,未经作者允许,不得转载