将 API link 消息解析为 C 中的服务器 (Arduino IDE)
parse an API link message as a server in C (Arduino IDE)
我正在使用 Arduino IDE 对我的微控制器进行编程,它有一个内置的 Wi-Fi 芯片 (ESP8266 NodeMCU),它连接到我的互联网路由器,然后有一个特定的 IP(就像192.168.1.5
).
所以我想通过添加到 link 的消息发送命令(和数据),然后 link 变为:192.168.1.5/?A=data1&B=data2
.
当从 LAN 内的设备启动上面的 link 时,我可以在字符串变量中获取消息,这里我现在有一条包含 "?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
头文件(link)的方法。例如,您可以通过遍历字符串的所有字符并验证所有字符都是数字(isnumber()
方法)来验证字符串是否为数字。
我正在使用 Arduino IDE 对我的微控制器进行编程,它有一个内置的 Wi-Fi 芯片 (ESP8266 NodeMCU),它连接到我的互联网路由器,然后有一个特定的 IP(就像192.168.1.5
).
所以我想通过添加到 link 的消息发送命令(和数据),然后 link 变为:192.168.1.5/?A=data1&B=data2
.
当从 LAN 内的设备启动上面的 link 时,我可以在字符串变量中获取消息,这里我现在有一条包含 "?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
头文件(link)的方法。例如,您可以通过遍历字符串的所有字符并验证所有字符都是数字(isnumber()
方法)来验证字符串是否为数字。