【问题标题】:C++ How to convert a vector<uint8_t> of size 4 into a 32 bit floatC++ 如何将大小为 4 的向量<uint8_t> 转换为 32 位浮点数
【发布时间】: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 表示十六进制。
  • ^ 是按位或,而不是求幂。

标签: c++ binary uint8t


【解决方案1】:

我相信这应该是最快的:

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

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

【讨论】:

    【解决方案2】:

    从向量中,您可以获得指向第一个字节的指针。如果字节的顺序已经正确,那么您可以将字节直接复制到float 变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      相关资源
      最近更新 更多