【发布时间】:2018-12-08 11:05:15
【问题描述】:
将大小为 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;
}
【问题讨论】:
-
memcpy,所有主要编译器都以最佳方式处理它。顺便说一句,您在 0xXXX 常量中有错误。你用的是二进制,但 0x 表示十六进制。
-
^是按位或,而不是求幂。