C++ 在C(Arduino IDE)中将API链接消息解析为服务器

C++ 在C(Arduino IDE)中将API链接消息解析为服务器,c++,api,arduino,arduino-esp8266,C++,Api,Arduino,Arduino Esp8266,我正在使用Arduino IDE来编程我的微控制器,它有一个内置的Wi-Fi芯片ESP8266 NodeMCU,它连接到我的互联网路由器,然后有一个特定的IP,如192.168.1.5 因此,我想通过添加到链接的消息发送命令和数据,然后链接变成:192.168.1.5/?a=data1&B=data2 当上面的链接从LAN内的设备启动时,我可以在字符串变量中获取消息,现在我有一条消息,其中包含?a=data1&B=data2 所以问题是:如何在不同的变量中获得A和B的内容 第二个简单的问题:如何

我正在使用Arduino IDE来编程我的微控制器,它有一个内置的Wi-Fi芯片ESP8266 NodeMCU,它连接到我的互联网路由器,然后有一个特定的IP,如192.168.1.5

因此,我想通过添加到链接的消息发送命令和数据,然后链接变成:192.168.1.5/?a=data1&B=data2

当上面的链接从LAN内的设备启动时,我可以在字符串变量中获取消息,现在我有一条消息,其中包含?a=data1&B=data2

所以问题是:如何在不同的变量中获得A和B的内容


第二个简单的问题:如何将内容转换为布尔、int或float变量?

算法如下所示。本例仅打印令牌,但您应该能够对其进行修改以处理键、值和异常情况

#include <stdio.h>
#include <malloc.h>
#include <string.h>

#define MESSAGE_TOKENS ("=&?")

int main()
{
    char *msg = "?A=data1&B=data2";
    char *msg_dup = strdup(msg);
    char *tok = strtok(msg_dup, MESSAGE_TOKENS);

    while (tok != NULL)
    {
        char delim = msg[tok - msg_dup - 1];

        switch(delim)
        {
            case '?':
            case '&':
                printf("key=%s\n", tok);
                break;
            case '=':
                printf("val=%s\n", tok);
                break;
            default:
                break;
        }

        tok = strtok(NULL, MESSAGE_TOKENS);
    }

    free(msg_dup);
}

对于数据类型,可以使用ctype.h头文件的方法。例如,您可以通过迭代字符串的所有字符并使用isnumber方法验证所有字符是否为数字来验证字符串是否为数字。

您使用什么来承载服务器?您采取了哪些步骤将该链接加入到您的程序中?我觉得你在这里是本末倒置。你可以使用正则表达式捕获组。或者strtok。@Thebluefish,这一步我已经做到了,你们可以查看这个youtube视频,它解释了这一步是如何达到的:@sturcotte06我从这里读到关于strtok的:我想这是在令牌之后和下一个令牌之前的字符串,我想这很难。你能把我送到一个正则表达式解释网站吗。求你了?为什么不使用?这是一个合乎逻辑的答案,我明天会尝试。有没有办法通过头部获取数据?我可以传递A=data1&B=data2,或者传递B=data1&C=data2?所以我现在有不止一个案子。我更喜欢将A、B、C替换为api调用,如:app_id、color。。。谢谢@sturcotte06的回答,我会马上反馈给你。谢谢@sturcotte06,效果很好。我将尝试用这种方法来解析数字。但我在stackoverflow搜索了如何将字符串中的十六进制颜色代码转换为相应的颜色值,这里是R=255ff,G=187bb,B=26。。