本帖最后由 ldy1973 于 2015-8-6 14:34 编辑
我在用这个函数做16进制浮点数转换成十进制浮点数时,时对时错。不知原因。求解
byte0低字节
byte3高字节
比如,我输入0xcb 0x24 0x79 0x3f 对应byte0到byte3.正确结果是0.97,但有时是错的,变成0.47。我只取了两位小数。其他舍掉了。实际转换结果是7位小数
float floattodecimal(uchar byte0, uchar byte1 , uchar byte2 , uchar byte3)
{
long int realbyte0 , realbyte1 , realbyte2,realbyte3 ;
char S ;
long int E , M ;
float D ;
realbyte0 = byte3 ;
realbyte1 = byte2 ;
realbyte2 = byte1 ;
realbyte3 = byte0 ;
if((realbyte0&0x80) == 0)
S = 0 ; // 正数
else
S = 1 ; //负数
E = ((realbyte0<<1) | ((realbyte1&0x80)>>7))-127 ;
M = ((realbyte1&0x7f)<<16) | (realbyte2<<8) | realbyte3 ;
D = pow(-1,S)*(1.0+M/pow(2,23))*pow(2,E);
return D;
} |