Tất cả những gì bạn cần làm là chuyển đổi chuỗi thành số nguyên và sau đó chia chúng thành ba giá trị r, g, b riêng biệt.
string hexstring = "#FF3Fa0";
// Get rid of '#' and convert it to integer
int number = (int) strtol(&hexstring[1], NULL, 16);
// Split them up into r, g, b values
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
Bạn cũng có thể muốn xem this question.
Chỉnh sửa (nhờ James comments):
Đối với một số máy (ví dụ như Arduino (Uno)), ints 16 bit thay vì 32. Nếu giá trị màu đỏ được thả cho bạn, sử dụng một thay vào đó.
string hexstring = "#FF3Fa0";
// Get rid of '#' and convert it to integer
long number = strtol(&hexstring[1], NULL, 16);
// Split them up into r, g, b values
long r = number >> 16;
long g = number >> 8 & 0xFF;
long b = number & 0xFF;
Chỉnh sửa (một phiên bản thậm chí an toàn, sử dụng strtoll
thay vì strtol
):
long long number = strtoll(&hexstring[1], NULL, 16);
// Split them up into r, g, b values
long long r = number >> 16;
long long g = number >> 8 & 0xFF;
long long b = number & 0xFF;
Nguồn
2014-05-10 04:12:08
Cái này trông tốt nhất với tôi cho đến nay nhưng vấn đề là tôi' m bắt đầu với một loại String và tôi nhận được không thể chuyển đổi 'String' thành 'const char *' –
Bạn có thể chuyển đổi một chuỗi thành 'const char *' bằng chuỗi sau đây = "# FF3Fa0"; const char * v2 = v1.c_str() '. Ngoài ra, '& hexstring [1]' này đơn giản có nghĩa là bạn lấy địa chỉ của 'hexstring [1]', không quan trọng cho dù đó là 'string' hay' const char * '. Tôi đã sửa đổi câu trả lời. –
Cảm ơn câu trả lời Yuchen! Tôi muốn lưu ý rằng đối với Arduino (Uno) ints của tôi là 16 bit thay vì 32. Nếu giá trị màu đỏ đang giảm cho bạn, hãy thử sử dụng một thời gian dài để thay thế. – James