Tutto ciò che devi fare è convertire la stringa in numeri interi e quindi dividerli in tre valori separati di r, g, b.
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;
Si consiglia di dare un'occhiata a this question pure.
Edit (grazie a James commenti):
Per qualche macchina (ad es Arduino (Uno)), int sono 16 bit invece di 32. Se i valori rossi sono in calo per te, utilizzare un lungo invece.
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;
Edit (una versione ancora più sicura, utilizzare strtoll
invece di 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;
fonte
2014-05-10 04:12:08
Questo sembra il migliore per me finora, ma il problema è che' m iniziando con un tipo di String e sto diventando impossibile convertire 'String' in 'const char *' –
Puoi convertire una stringa in 'const char *' dalla seguente stringa 'v1 = "# FF3Fa0"; const char * v2 = v1.c_str() '. Inoltre, questo '& hexstring [1]' significa semplicemente che prendi l'indirizzo di 'hexstring [1]', non importa se è 'stringa' o' const char * '. Ho modificato la risposta. –
Grazie per la risposta Yuchen! Voglio notare che per i miei Arduino (Uno) int sono 16 bit invece di 32. Se i valori rossi stanno calando per te, prova a usare un long invece. – James