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);
});