将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;
}
答案 0 :(得分:0)
我认为这应该是最快的:
return *reinterpret_cast<float*>(&bytes[0]);
我认为它在技术上是不确定的行为。但是大多数编译器应在此处输出您期望的结果。 &bytes [0]可以正常工作,因为std :: vector可以保证是连续的。
答案 1 :(得分:-1)
从向量中可以获取到第一个字节的指针。如果字节的顺序正确,则可以将字节直接复制到float
变量中。