我有一个Float值(32位)(范围-1.0到+1.0),对于嵌入式应用程序,它需要在C中转换为24位值(有符号数据)。
有人可以让我知道如何执行此转换吗?
我想要这样的东西:
浮点数-> 24位整数
-1.0-> 0x00800000
-0.5-> 0x00C00000
-0.25-> 0x00E00000
0.0-> 0x00000000
+0.25-> 0x00200000
+0.5-> 0x00400000
+1.0-> 0x007FFFFF
感谢大家的回应。
不幸的是,我不能在开发环境中使用“ math.h”。
我在微控制器论坛中找到了一种优化的方法。
typedef union{
struct{
Uint16 lo;
Uint16 hi;
}u16;
Uint32 u32;
int32 i32;
float f;
}Versatype32;
void Float_to_I24bit(int *dest, float *src, Uint32 length)
{
register Versatype32 data;
while(length--){
data.f = *src;
data.i32 = ((int32)(data.f * 8388608) & 0x00ffffff);
*dest++ = data.u16.hi;
*dest++ = data.u16.lo;
src++;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句