将int16_t内存转换为float

时间:2010-07-16 16:21:11

标签: c++ memory casting floating-point

我有一个来自外部源的函数,它返回一个包含2个uint16_t元素的数组(我将其转换为int)。

我已经能够将这些转换为一个“大”int((i1 << 16) + i2

现在我需要能够将它转换为float,保持点值在内存中。

任何人都可以提出一个方法或指出我正确的方向吗?

提前致谢!

3 个答案:

答案 0 :(得分:5)

我建议你要清楚地知道你正在乱搞并使用memcpy:

float a;
int b;

memcpy(&a,&b,min(sizeof(a),sizeof(b)));
当你早已离开时,有人可能会遇到你的代码,在这种情况下,这会显示故意会发生一些特殊的事情。

答案 1 :(得分:2)

我会使用工会:

union fltconv {
    float f;
    uint32_t i;
} u;
u.i = ((uint32_t) i1 << 16) | i2;
float f = u.f;

你对自己所做的事情更明确。请记住,这是非常不可移植。

答案 2 :(得分:0)

这样的事情可能有用吗?

uint32_t a = ....; // Contains your big int.
float b = *(float*)&a;

当然,这需要你知道int的大小与float相同......