Arduino CSS C++ 中的 RGB 十六进制颜色解析
Arduino CSS RGB hex color parsing in C++
我正在使用 ESP8266 运行 通过 MQTT 我的智能房间。
我正在努力将字符串转换为分隔的 RGB 整数值。
我得到的字符串如下所示:#953f4f
我已经尝试过toInt()
、atoi()
、atol()
、转换等
代码如下:
mqtt.subscribe("light/rgb", [] (const String &payload) {
char msg[payload.length() + 1];
payload.toCharArray(msg, payload.length() + 1);
int r = msg[1];
Serial.println(r);
});
现在我需要找出如何将 ASCII 转换为 int。
除非有更好的方法将字符串转换为 int。
如果 Arduino 有 strtol
那么你可以这样做:
mqtt.subscribe("light/rgb", [] (const String &payload) {
if (payload.length() != 7) {
Serial.printf("invalid payload: '%s'\n", payload.c_str());
return;
}
long rgb = strtol(payload.c_str() + 1, 0, 16); // parse as Hex, skipping the leading '#'
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
Serial.printf("r=%d, g=%d, b=%d\n", r, g, b);
});
我正在使用 ESP8266 运行 通过 MQTT 我的智能房间。
我正在努力将字符串转换为分隔的 RGB 整数值。
我得到的字符串如下所示:#953f4f
我已经尝试过toInt()
、atoi()
、atol()
、转换等
代码如下:
mqtt.subscribe("light/rgb", [] (const String &payload) {
char msg[payload.length() + 1];
payload.toCharArray(msg, payload.length() + 1);
int r = msg[1];
Serial.println(r);
});
现在我需要找出如何将 ASCII 转换为 int。
除非有更好的方法将字符串转换为 int。
如果 Arduino 有 strtol
那么你可以这样做:
mqtt.subscribe("light/rgb", [] (const String &payload) {
if (payload.length() != 7) {
Serial.printf("invalid payload: '%s'\n", payload.c_str());
return;
}
long rgb = strtol(payload.c_str() + 1, 0, 16); // parse as Hex, skipping the leading '#'
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
Serial.printf("r=%d, g=%d, b=%d\n", r, g, b);
});