C++ How to convert a vector of size 4 into a 32 bit float


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



What is the fastest way to convert a vector of size 4 into a 32 bit float?



My failed attempt:


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, all major compilers handle it optimally. Btw, you have bugs in the 0xXXX constants. You used binary, but 0x means hexadecimal.
– geza
Jun 29 at 9:42






^ is bitwise-or, not exponentiation.
– aschepler
Jun 29 at 12:02


^




1 Answer
1



From the vector you can get a pointer to the first byte. If the bytes are already in the correct order, then you can copy the bytes directly into a float variable.


float






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Comments

Popular posts from this blog

paramiko-expect timeout is happening after executing the command

Opening a url is failing in Swift

Export result set on Dbeaver to CSV