c++ - 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;
}
解决方案
我相信这应该是最快的:
return *reinterpret_cast<float*>(&bytes[0]);
我认为它在技术上未定义的行为。但是大多数编译器应该在这里输出你所期望的。&bytes[0] 保证工作,因为 std::vector 保证是连续的。
推荐阅读
- react-native - 在 React Native 中单击 TouchableOpacity 时如何创建模式?
- firebase - 在 Firebase 配置文件中设置部署区域
- php - 这是关于定义的php错误吗?
- ios - Swift - 如何将本地存储的对象数组(文件管理器)转换为较新的对象?(带有附加属性)
- netlogo - 如何让海龟在新模型中只在白块中移动?
- java - 打开地图时提醒地理围栏一次
- python - 在 Grafana 中绘制非日期格式的时间序列
- php - 从 Android 向 php 发送查询
- javascript - 提交数据后使按钮消失
- android - 是否需要为我使用的每个 GestureDetector 调用 setState()?