Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何转换向量<;uint8_t>;将大小4转换为32位浮点_C++_Binary_Uint8t - Fatal编程技术网

C++ C++;如何转换向量<;uint8_t>;将大小4转换为32位浮点

C++ C++;如何转换向量<;uint8_t>;将大小4转换为32位浮点,c++,binary,uint8t,C++,Binary,Uint8t,将大小为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.

将大小为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;
}
静态bool vec2float32(标准::向量字节、浮点和结果)
{
if(bytes.size()!=4)返回false;
uint8_t sign=(字节数。at(0)&0x10000000);//将为1或0
uint8_t指数=(在(0)和0x01111111处的字节数);

uint16_t尾数=(字节数位于(1)从向量中可以获得指向第一个字节的指针。如果字节的顺序已经正确,则可以将字节直接复制到
float
变量中。

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

我认为这应该是最快的:

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

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

我认为这应该是最快的:

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

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

memcpy,所有主要编译器都以最佳方式处理它。顺便说一句,您在0xXXX常量中有错误。您使用了二进制,但0x表示十六进制。
^
是按位的,而不是求幂。memcpy,所有主要编译器都以最佳方式处理它。顺便说一句,您在0xXXX常量中有错误您使用的是二进制,但0x表示十六进制。
^
是按位或,而不是指数运算。