将包含二进制的字符串转换为浮点数

Converting a string holding binary to float

我有一个字符串,其中包含一个二进制值,我想将其转换为浮点数。我找不到执行此操作的方法。

比如我有一个

string temp =  "00000000000000000000000101111100";

用二进制表示0.25。

在 temp 上使用 stofstring::size_type 产生 1.0111110e+008 存储在浮点变量中(根据 visual studio)并打印该值导致垃圾 - 101111104.

我的问题:有没有办法直接将二进制字符串转换为浮点数,或者我需要计算浮点数然后存储它?

这是一种方式

std::string temp = "00000000000000000000000101111100";
assert(temp.length() == 32);
int n = 0;
for(int i = 0; i < temp.length(); ++i)
{
    n |= (temp[i] - 48) << i;
}
float f = *(float *)&n;

不确定为什么要转换为 float,但可以使用 std::bitset

转换为 unsigned long
#include <bitset>

//...

std::string temp =  "00000000000000000000000101111100";
std::bitset<33> n (temp);
unsigned long result = n.to_ulong();

REF

当然,如果需要,您可以将 unsigned long 转换为 float。