2015-05-29 141 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