#include <iostream>
using namespace std;
typedef char (*PTR_TO_ARR)[30];
typedef int (*PTR_TO_FUNC)(int, int);
typedef unsigned int uni32;
typedef unsigned char byte;
int max(int a, int b){
return a>b ? a : b;
}
typedef union
{
byte u8Bit[4];
float fds;
} BYTE4_TO_FLOAT;
int main(){
BYTE4_TO_FLOAT num;
float dinum = 0;
byte pcDsSource[4] = {0x4A,0,0,0};
char *pcDataOut = NULL;
pcDataOut = (char *)malloc(sizeof(byte)*20);
num.u8Bit[0] = pcDsSource[3];
num.u8Bit[1] = pcDsSource[2];
num.u8Bit[2] = pcDsSource[1];
num.u8Bit[3] = pcDsSource[0];
dinum = ( float )num.fds;
num.fds = -2.0;
/*sprintf_s( pcDataOut, 20, pcFormat, dinum );*/
sprintf( pcDataOut,”%-10.2f”, dinum );
system(“pause”);
return 0;
}
IEEE浮点数的存放格式
对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示;
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;则按照规定,该浮点数的值用十进制表示为:
=(-1)^s *(1 + x)*2^(e – 127)
对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为1001 0100,读成十进制就是148,即e = 148。
3、第22~0 bit均为0,也就是二进制的纯小数部分为0,即x = 0。
这样,该浮点数的十进制表示
=(-1)^s * (1 + x)* 2个(e – 127)
=(-1)^0*(1+0)* 2个(148-127)= 2097152.0
把所需要存取的浮点数和一个数组(byte u8Bit[4])构成一个联合,存取的时候用数组,使用的时候用浮点数,如下:
union myfloat
{
byte u8Bit[4];
float fds;
}