将保存二进制的字符串转换为float

时间:2015-05-29 04:36:41

标签: c++ string floating-point

我有一个字符串,其中包含我想要转换为float的二进制值。我找不到办法做到这一点。

例如,我有一个

string temp =  "00000000000000000000000101111100";

以二进制表示0.25。

stof使用string::size_type会产生1.0111110e + 008存储在浮点变量中(根据visual studio)并将值打印在垃圾 - 101111104。

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

2 个答案:

答案 0 :(得分:4)

这将是一种方式

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;

答案 1 :(得分:0)

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

#include <bitset>

//...

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

REF

当然,如果你愿意,你可以将unsigned long转换为float。