C++ 在C(Arduino IDE)中将API链接消息解析为服务器
我正在使用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的内容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的内容 第二个简单的问题:如何
第二个简单的问题:如何将内容转换为布尔、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。。