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

How do I convert Q format integers to float (or vice versa)?

本文关键字:浮点数 反之亦然 转换 整数 格式      更新时间:2023-10-16

我四处搜索,找不到一个好的SO问题,对这个问题有一个一般的答案:

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

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

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

以下是一般的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