程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的string系列--十六進制的字符串轉為十六進制的整型(通常是顏色代碼使用)

實戰c++中的string系列--十六進制的字符串轉為十六進制的整型(通常是顏色代碼使用)

編輯:C++入門知識

實戰c++中的string系列--十六進制的字符串轉為十六進制的整型(通常是顏色代碼使用)


很久沒有寫關於string的博客了。因為寫的差不多了。但是最近又與string打交道,於是荷爾蒙上腦,小蝌蚪躁動。

在程序中,如果用到了顏色代碼,一般都是十六進制的,即hex。

但是服務器給你返回一個顏色字符串,即hex string

你怎麼把這個hex string 轉為 hex,並在你的代碼中使用?

更進一步,你怎麼辦把一個形如”#ffceed”的hex string 轉為 RGB呢?

第一個問題在Java中是這樣搞的:

public static int parseColor(@Size(min=1) String colorString) {
if (colorString.charAt(0) == '#') {
// Use a long to avoid rollovers on #ffXXXXXX
long color = Long.parseLong(colorString.substring(1), 16);
if (colorString.length() == 7) {
// Set the alpha value
color |= 0x00000000ff000000;
} else if (colorString.length() != 9) {
throw new IllegalArgumentException("Unknown color");
}
return (int)color;
} else {
Integer color = sColorNameMap.get(colorString.toLowerCase(Locale.ROOT));
if (color != null) {
return color;
}
}
throw new IllegalArgumentException("Unknown color");
}

但是在C++中,我們可以用流,這樣更加簡潔:

    auto color_string_iter = hex_string_color.begin();
    hex_string_color.erase(color_string_iter);
    hex_string_color= "ff" + hex_string_color;
    DWORD color;
    std::stringstream ss;
    ss << std::hex << hex_string_color;
    ss >> std::hex >> color;

    btn1->SetBkColor(color);
    btn2->SetBkColor(0xff123456);

另一種方法,可以使用:std::strtoul
主要是第三個參數:
Numerical base (radix) that determines the valid characters and their interpretation.
If this is 0, the base used is determined by the format in the sequence

#include 
#include  // for std::cout

int main()
{
    char hex_string[] = "0xbeef";
    unsigned long hex_value
        = std::strtoul(hex_string, 0, 16);
    std::cout << "hex value: " << hex_value << std::endl;
    return 0;
}

接下來看看如何把hex string 轉rgb:

#include 
#include 

int main()
{
   std::string hexCode;
   std::cout << "Please enter the hex code: ";
   std::cin >> hexCode;

   int r, g, b;

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

   // ... and extract the rgb values.
   std::istringstream(hexCode.substr(0,2)) >> std::hex >> r;
   std::istringstream(hexCode.substr(2,2)) >> std::hex >> g;
   std::istringstream(hexCode.substr(4,2)) >> std::hex >> b;

   // Finally dump the result.
   std::cout << std::dec << "Parsing #" << hexCode 
      << " as hex gives (" << r << ", " << g << ", " << b << ")" << '\n';
}

這裡有一點忠告,也是忠告自己。
我們從學習編程開始,最熟悉的就是print或是cout看看結果。但是在實際工作中是很少用到的。比如有一個十進制數100,我們何以通過cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved