浮点数转换为C中的24位整数

灵长类

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章