1、IEEE-754 32位单精度浮点数(4字节)
1.1 32位单精度浮点数
其中, 32位16进制数包括1位符号位(SIGN),8位指数位(EXPONENT)和
23位尾数位(MANTISSA)。
例如:
25.3可以表示为41CA6666(0x41为高字节)
1.2 单精度转换程序(右高字节)
将四字节16进制的数据转换为float数据:
#include<iostream>
using namespace std;
typedef unsigned char uint8_t;
typedef uint8_t u8;
float DATA_Trans(u8 Data_1,u8 Data_2,u8 Data_3,u8 Data_4)
{
long long transition_32;
float tmp=0;
int sign=0;
int exponent=0;
float mantissa=0;
transition_32 = 0;
transition_32 |= Data_4<<24;
transition_32 |= Data_3<<16;
transition_32 |= Data_2<<8;
transition_32 |= Data_1;
sign = (transition_32 & 0x80000000) ? -1 : 1;
exponent = ((transition_32 >> 23) & 0xff) - 127;
mantissa = 1 + ((float)(transition_32 & 0x7fffff) / 0x7fffff);
tmp=sign * mantissa * pow(2, exponent);
return tmp;
}
int main()
{
float num= DATA_Trans(0x44, 0x8B, 0xA4, 0x41);
printf("%f\n",num);
return 0;
}
2、IEEE-754 64位双精度浮点数(8字节)
2.1 64位单精度浮点数
其中, 64位16进制数包括1位符号位(SIGN),11位指数位(EXPONENT)和
52位尾数位(MANTISSA)。
例如:
25.3可以表示为40394CCCCCCCCCCD(0x40为高字节)
2.2 双精度转换程序(右高字节)
将八字节16进制的数据转换为double数据:
double DATA_Trans_2(u8 Data_1,u8 Data_2,u8 Data_3,u8 Data_4,u8 Data_5,u8 Data_6,u8 Data_7,u8 Data_8)
{
long long transition_32;
double tmp=0;
int sign=0;
float exponent=0;
double mantissa=0;
transition_32 = 0;
transition_32 |= (uint64_t)Data_8<<56;
transition_32 |= (uint64_t)Data_7<<48;
transition_32 |= (uint64_t)Data_6<<40;
transition_32 |= (uint64_t)Data_5<<32;
transition_32 |= (uint64_t)Data_4<<24;
transition_32 |= (uint64_t)Data_3<<16;
transition_32 |= (uint64_t)Data_2<<8;
transition_32 |= (uint64_t)Data_1;
sign = (transition_32 & 0x8000000000000000) ? -1 : 1;
exponent = ((transition_32 >> 52) & 0x7ff) - 1023;
mantissa = 1 + ((double)(transition_32 & 0xfffffffffffff) / 0xfffffffffffff);
tmp=sign * mantissa * pow(2, exponent);
return tmp;
}
int main()
{
double num2= DATA_Trans_2(0xa4, 0x70, 0x3d, 0x0a, 0xd7, 0x43, 0x40, 0x40);
printf("%lf\n",num2);
return 0;
}
2、在线工具(采用左高字节)
https://tooltt.com/floatconverter/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)