我正在使用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
#include
#include
#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
", tok);
break;
case '=':
printf("val=%s
", tok);
break;
default:
break;
}
tok = strtok(NULL, MESSAGE_TOKENS);
}
free(msg_dup);
}
對于數據類型,您可以使用ctype.h頭文件(link)的方法。例如,您可以通過迭代字符串的所有字符并驗證所有字符都是數字來驗證字符串是否為數字(isnumber()方法)。