簡體   English   中英

C ++如何轉換向量 <uint8_t> 大小4變成32位浮點數

[英]C++ How to convert a vector<uint8_t> of size 4 into a 32 bit float

將大小為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是連續的。

從向量中,您可以獲得指向第一個字節的指針。 如果字節已經按照正確的順序排列,則可以將字節直接復制到float變量中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM