首页 > 解决方案 > C++ 如何转换向量大小为 4 的 32 位浮点数

问题描述

将大小为 4 的向量转换为 32 位浮点数的最快方法是什么?

我失败的尝试:

static bool vec2float32(std::vector<uint8_t> bytes, float &result)
{
    if(bytes.size() != 4) return false;
    uint8_t sign = (bytes.at(0) & 0x10000000); //will be 1 or 0
    uint8_t exponent = (bytes.at(0) & 0x01111111);
    uint16_t mantissa = (bytes.at(1) << (2*8)) + (bytes.at(2) << (1*8)) + (bytes.at(3) << (0*8));

    result = (2^(exponent - 127)) * mantissa;
    if(sign == 1) result = result * -1;
    return true;
}

标签: c++binaryuint8t

解决方案


我相信这应该是最快的:

return *reinterpret_cast<float*>(&bytes[0]);

我认为它在技术上未定义的行为。但是大多数编译器应该在这里输出你所期望的。&bytes[0] 保证工作,因为 std::vector 保证是连续的。


推荐阅读