【发布时间】:2016-06-07 08:51:53
【问题描述】:
我有以下 Arduino 代码
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "inetGSM.h"
#include<String.h>
InetGSM inet;
char msg[165];
char store[2];
char a;
char b;
char* disp;
boolean started=false;
void setup()
{
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(2400)) {
Serial.println("\nstatus=READY");
started=true;
} else Serial.println("\nstatus=IDLE");
if(started)
{
//GPRS attach, put in order APN, username and password.
//If no needed auth let them blank.
if (inet.attachGPRS("TATA.DOCOMO.INTERNET", "", ""))
Serial.println("status=ATTACHED");
else Serial.println("status=ERROR");
delay(1000);
//TCP Client GET, send a GET request to the server and
//save the reply.
inet.httpGET("www.boat.esy.es", 80, "/retrieve.php", msg, 165);
//Print the results.
Serial.println("\nData received:");
disp = strstr(msg,"\r\n\r\n");
disp = disp+4;
a = disp[1];
b = disp[2];
}
}
void loop()
{
Serial.println("Begin");
Serial.println(a);
Serial.println("+");
Serial.println(b);
Serial.println("End");
delay(500);
}
我程序中的 disp 变量接受值 1 和 1 作为字符串。我希望这个 1 & 1 存储在两个单独的变量中。所以我尝试了上面提到的方式,这就是我得到的
输出
Begin
1
+
End
Begin
1
+
End
Begin
1
+
End
如果我对数组的理解正确,char arr[100] 与char* arr 相同,只是前者在内存中保留了100 个字符位置,那么b = disp[2] 应该给后者1 的11 对吗?
我不想使用 String 库,因为那会占用大量内存。因此,如果有任何我不知道的方法可以提取两个 1 并将它们分开存储,请告诉我。
感谢您的宝贵时间!
【问题讨论】:
-
“11 后 1 对”是什么意思?
-
你的预期输出是什么?
-
您确定http://www.boat.esy.es/retrieve.php 返回字符串
"\r\n\r\n11"。 IMO 你从那里得到的字符串只是"11",因此disp = strstr(msg,"\r\n\r\n");是错误的。 -
@Rakete1111 当我的 Arduino 向 Web 服务器上的 PHP 脚本发出 GET 请求时,它会收到带有 Header 和 Body 的响应。我已经提取了正文的内容并将其存储在
disp变量中。存储的内容是 11。现在我希望它们分成 1 和 1,并存储到两个单独的变量 a 和 b -
@MichaelWalz
disp = strstr(msg,"\r\n\r\n")实际上从 HTTP 响应中提取了我需要的内容。如果您查看我的代码,您会看到响应存储在msg变量中,并且该响应包含HTTP 1.0 SERVER:APACHE..之类的内容(我猜通常是响应的标题部分)。所以为了从它的头部提取响应的主体,我使用了strstr(msg,"\r\n\r\n")。现在我希望将响应“11”拆分为“1”和“1”并存储在两个单独的变量中
标签: c++ c arrays string arduino