本帖最后由 静默 于 2009-11-13 15:32 编辑
// 24位带符号的二进制转换成小数. 其值范围是 -1.0 <= X < 1.0
// MSB -(2^0) (2^-1) .............. (2^-23), 数据放在 u32的第二、三、四字节.
float Sign24BitToFloat( u32 u32Dat )
{
float lfloTmp;
// 正数,负数.
// 当最高位为0时,其为正数,为1时,其为负数。
if( u32Dat & 0x00800000 ) // 不为0时为负数.
{
lfloTmp = -1.0 * (float)(0x01000000 - u32Dat)/0x00800000;
}
else
{
// lfloTmp = (float)u32Dat / 0x00800000L;
lfloTmp = (float)(1.0*u32Dat)/8388608L;
}
return lfloTmp;
} //(说明:该函数用VC验证过,在windows XP下运行正确。)
调用Sign24BitToFloat( 0x19999)时,结果是0.007849, 理论结果应该是0.0125.
那位帮帮忙,偶多给分。 |