如何将Q格式整数转换为浮点数(反之亦然)?

时间:2018-04-05 17:19:45

标签: c++

我四处搜索,无法找到一个好问题,并回答这个问题的一般答案:

给定使用Q Format的整数,如何将该数字转换为普通浮点类型?

反之亦然:如何将浮点类型转换为Q Format整数?

例如,Q2整数5应为1.25浮点数,浮点数1.25应为Q2格式的整数5

1 个答案:

答案 0 :(得分:0)

以下是一般的C ++解决方案:

template<class IntegerType>
float qToFloat(IntegerType q, int fractional_bits)
{
    return ((float) q) * std::pow(2, -fractional_bits);
}

template<class IntegerType>
IntegerType floatToQ(float q, int fractional_bits)
{
    return (int) (q * std::pow(2, fractional_bits));
}

使用示例:

qToFloat<uint16_t>(5, 2);     //1.25
floatToQ<uint16_t>(1.25f, 2); //5