我正在使用Arduino IDE来编程我的微控制器,它有一个内置的Wi-Fi芯片(ESP8266 NodeMCU),它连接到我的互联网路由器,然后有一个特定的IP(就像192.168.1.5
)。
所以我想通过添加到链接的消息发送命令(和数据),然后链接变为:192.168.1.5/?A=data1&B=data2
。
当从LAN中的设备启动上面的链接时,我可以在String变量中获取消息,这里我现在有一条包含"?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()
方法)。