2014-03-19 169 views
1

如何將hexadecimal字符串顏色#FF0022值轉換爲RGB顏色C++從十六進制字符串顏色到RGB顏色

來自:

#FF0022 

r:255 
g:0 
b:34 

我不知道該怎麼做,我已搜查谷歌沒有運氣,請告訴我怎麼說,所以我可以瞭解更多信息。

+3

我不相信你嘗試,因爲有噸結果使用谷歌(RGB串C,RGB字符串值...) –

+0

如果你知道剩下的很簡單:將它分成3個組成部分,FF,00和22.根據情況轉換爲小數。 –

+0

https://github.com/kkaefer/css-color-parser-cpp –

回答

3

解析整個字符串,然後使用strtol()將每組兩個字符轉換爲十進制。

+0

在代碼中顯示請使其功能 – user1022734

+4

不要「顯示在代碼中」。讓他工作一點。 – ooga

0

下面是一個代碼示例:

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

std::vector<std::string> SplitWithCharacters(const std::string& str, int splitLength) { 
    int NumSubstrings = str.length()/splitLength; 
    std::vector<std::string> ret; 

    for (int i = 0; i < NumSubstrings; i++) { 
    ret.push_back(str.substr(i * splitLength, splitLength)); 
    } 

    // If there are leftover characters, create a shorter item at the end. 
    if (str.length() % splitLength != 0) { 
     ret.push_back(str.substr(splitLength * NumSubstrings)); 
    } 


    return ret; 
} 

struct COLOR { 
    short r; 
    short g; 
    short b; 
}; 

COLOR hex2rgb(string hex) { 
    COLOR color; 

    if(hex.at(0) == '#') { 
     hex.erase(0, 1); 
    } 

    while(hex.length() != 6) { 
     hex += "0"; 
    } 

    std::vector<string> colori=SplitWithCharacters(hex,2); 

    color.r = stoi(colori[0],nullptr,16); 
    color.g = stoi(colori[1],nullptr,16); 
    color.b = stoi(colori[2],nullptr,16); 

    return color; 
} 

int main() { 
    string hexcolor; 

    cout << "Insert hex color: "; 
    cin >> hexcolor; 

    COLOR color = hex2rgb(hexcolor); 

    cout << "RGB:" << endl; 
    cout << "R: " << color.r << endl; 
    cout << "G: " << color.g << endl; 
    cout << "B: " << color.b << endl; 

    return 0; 
} 
相關問題