2015-05-29 167 views
2

我有一个字符串保存二进制值,我想将其转换为浮点数。我找不到办法做到这一点。将保存二进制的字符串转换为浮点数

例如,我有一个

string temp = "00000000000000000000000101111100"; 

表示0.25二进制。

(根据视觉工作室)上临时使用stofstring::size_type收率1.0111110e + 008存储在浮动变量并打印在垃圾的值的结果 - 101111104.

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

+0

随着texasbruce的回答,你也可以通过bitsets获得相同的结果。演示:http://ideone.com/NQFXux – sajas

回答

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; 
+0

嗯所以显然使用cout来打印产生的浮动将打印0.25,但后面有很多零 - 0.25000000000,其中超过100个 – armorlord

+0

@abd是否与'std :: cout << 0.25f'? – Axalo

+0

是的。我忘了我重新定义了它的精确度来做一些测试。 – armorlord

0

不知道为什么你会转换为浮动,但你能长时间使用转换为无符号std::bitset

#include <bitset> 

//... 

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

REF

当然,你可以如果需要,可以将无符号长整型浮动。

+0

好吧,我的花车可能是负面的 – armorlord

相关问题