Arduino - 将 HEX 转换为 RGB 的奇怪行为
Arduino - Strange behavior converting HEX to RGB
我正在尝试将 HEX 颜色代码转换为 RGB,但是当我 运行 Arduino 上的代码时,它没有选择红色。
我是不是做错了什么?
在 C++ 编译器上工作得很好。
void setup() {
Serial.begin(115200);
String hexstring = "B787B7";
int number = (int) strtol( &hexstring[1], NULL, 16);
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
Serial.print("red is ");
Serial.println(r);
Serial.print("green is ");
Serial.println(g);
Serial.print("blue is ");
Serial.println(b);
}
void loop() {
}
您的 number
应该是 long
类型,因为类型 int
是按 16 位编码的,不能取超过 32,767 的值。
void setup() {
Serial.begin(115200);
String hexstring = "B787B7";
long number = (long) strtol( &hexstring[1], NULL, 16);
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
Serial.print("red is ");
Serial.println(r);
Serial.print("green is ");
Serial.println(g);
Serial.print("blue is ");
Serial.println(b);
}
void loop() {
}
当我 运行 你的代码时,我仍然没有获得红色的价值。
但是使用 MAC 的相同代码
long number = (long) strtol( &hexstring[1], NULL, 16 );
至
long number = (long) strtol( &hexstring[0], NULL, 16 );
我希望这能帮助那些在 RGB 和 HEX 值上苦苦挣扎的人
我正在尝试将 HEX 颜色代码转换为 RGB,但是当我 运行 Arduino 上的代码时,它没有选择红色。
我是不是做错了什么?
在 C++ 编译器上工作得很好。
void setup() {
Serial.begin(115200);
String hexstring = "B787B7";
int number = (int) strtol( &hexstring[1], NULL, 16);
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
Serial.print("red is ");
Serial.println(r);
Serial.print("green is ");
Serial.println(g);
Serial.print("blue is ");
Serial.println(b);
}
void loop() {
}
您的 number
应该是 long
类型,因为类型 int
是按 16 位编码的,不能取超过 32,767 的值。
void setup() {
Serial.begin(115200);
String hexstring = "B787B7";
long number = (long) strtol( &hexstring[1], NULL, 16);
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
Serial.print("red is ");
Serial.println(r);
Serial.print("green is ");
Serial.println(g);
Serial.print("blue is ");
Serial.println(b);
}
void loop() {
}
当我 运行 你的代码时,我仍然没有获得红色的价值。 但是使用 MAC 的相同代码
long number = (long) strtol( &hexstring[1], NULL, 16 );
至
long number = (long) strtol( &hexstring[0], NULL, 16 );
我希望这能帮助那些在 RGB 和 HEX 值上苦苦挣扎的人