Arduino:将字符串十六进制"#FFFFFF"转换为3 int

Pol*_*her 7 c c++ hex arduino

我完全新的C/C++,我试图找出如何,这将是一个HTML样式的RGB十六进制的形式,如"#FFFFFF",并把它转换成3点的整数瓦尔一个字符串参数转换

我真的不确定在哪里.

Yuc*_*ong 14

您需要做的就是将字符串转换为整数,然后将它们分成三个独立的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;
Run Code Online (Sandbox Code Playgroud)

您可能也想看看这个问题.


编辑(感谢詹姆斯评论):

对于某些机器(例如Arduino(Uno)),整数是16位而不是32位.如果红色值正在下降,请使用长整数.

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;
Run Code Online (Sandbox Code Playgroud)

编辑(更安全的版本,strtoll代替使用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;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢Yuchen的答案!我想要注意的是,对于我的Arduino(Uno)整数是16位而不是32位.如果红色值正在下降,请尝试使用长整数. (2认同)