2013-03-31 101 views
2

我試圖通過讀取文件來轉換顏色代碼,檢索顏色代碼並將其存儲爲字符串。這有效,但是當我試圖簡單地將它轉換爲int時,它不起作用 - 當我做一個cout時總是變爲0。C++將顏色值字符串轉換爲int

string value = "0xFFFFFF"; 
unsigned int colorValue = atoi(value.c_str()); 
cout << colorValue << endl; 

,你可以看到,我已經得到了顏色0XFFFFFF,但其轉換爲int只會給我0有人可以告訴我什麼,我丟失或我在做什麼錯?

感謝

+1

'atoi'是C不是C++方法。我也相信'atoi'不能處理十六進制變量。 –

+4

http://stackoverflow.com/questions/1070497/c-convert-hex-string-to-signed-integer – Daniel

+0

感謝您的信息,那麼我必須做什麼呢? – Danny

回答

2

我建議使用stringstreams:

std::string value = "0xFFFFFF"; 
unsigned int colorValue; 
std::stringstream sstream; 
sstream << std::hex << value; 
sstream >> colorValue; 
cout << colorValue << endl; 
0

由於@BartekBanachewicz說,atoi()是不是這樣做的C++的方式。利用C++流的強大功能,並使用std::istringstream爲您做到這一點。請參閱this

的摘錄:

template <typename DataType> 
DataType convertFromString(std::string MyString) 
{ 
    DataType retValue; 
    std::stringstream stream; 
    stream << std::hex << MyString; // Credit to @elusive :) 
    stream >> retValue; 
    return retValue; 
} 
+0

這是一個好主意,但編寫的代碼仍然會產生相同的問題。 '「0xFFFFFF」'將返回'0'。 –

+0

是的,剛剛意識到這一點。解決方案很簡單,使用@ elusive的策略。我會更新我的回答:) – amrith92