2011-09-08 50 views
0

我有一個C++腳本,它涉及可能的十六進制數字的字符串表示形式。在腳本的後面部分,我想將這些可能的十六進制數字轉換爲基數爲10的一些算術的雙打。爲了嘗試進行這種轉換,我使用了一個函數。字符串轉換中的十六進制值

double MyFunction(string input) 
{ 
double Number; 
stringstream ss(input); 
ss >> hex >> Number; 
return Number; 
} 

當我的腳本運行時,似乎結果轉換的字符串只被視爲十進制數。如果原始字符串是「fc」或「b5」,則表示轉換後的數字是-9.25596e + 061。但是如果字符串是「33」(應該是0x33),它將它視爲十進制33.我已經嘗試了它,而沒有「>> hex」,並在轉換之前向字符串添加了一個「0x」前綴編譯似乎像理解0xF一樣理解0xF),但沒有這樣的運氣。

我知道計算機將所有東西都存儲爲二進制,並且數字的基數沒有存儲,但我根本不明白這裏出了什麼問題。爲什麼它似乎堅持以10爲基數讀取字符串並忽略A-F的任何實例?

任何幫助將不勝感激。

回答

4

十六進制機械手只適用於int等整數類型。首先輸入十六進制字符串爲一個整數,然後將其轉換爲雙精度:

double MyFunction(string input) 
{ 
    int Number; // Notice now Number is an integer 
    stringstream ss(input); 
    ss >> hex >> Number; 
    return Number; // This should convert Number to a double via promotion 
} 
+0

工作正常!詹姆斯,謝謝你! – anon

相關問題