检测C ++ char流中的字符

时间:2011-02-10 17:50:55

标签: c++ string stream char

我正在使用一个内置wifi的BlackWidow版本的arduino代码。使用WiServer.h库,我正在使用带有mods的SimpleClient.pde示例向网络服务器发送一个调用只需返回一个整数 - 0,1或2.最终目标是打开红绿灯,绿灯或黄灯的引脚。整数表示我们的Hudson CI的聚合状态。

我是一个PHP懒惰的混蛋,指针吓到我了。我正在使用的代码是

// Function that prints data from the server
void printData(char* data, int len) {

  // Print the data returned by the server
  // Note that the data is not null-terminated, may be broken up into smaller packets, and 
  // includes the HTTP header. 
  while (len-- > 0) {
    Serial.print(*(data++));
  }
}

printData()是对Web服务器的调用的回调,并且在运行时它将以下内容发送到串行监视器(这是3个循环,在新输出之前没有换行符):

HTTP/1.1 200 OK
Date: Thu, 10 Feb 2011 17:37:37 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11
X-Powered-By: PHP/5.2.11
Content-Length: 1
Connection: close
Content-Type: text/html

0HTTP/1.1 200 OK
Date: Thu, 10 Feb 2011 17:37:45 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11
X-Powered-By: PHP/5.2.11
Content-Length: 1
Connection: close
Content-Type: text/html

0HTTP/1.1 200 OK
Date: Thu, 10 Feb 2011 17:37:58 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11
X-Powered-By: PHP/5.2.11
Content-Length: 1
Connection: close
Content-Type: text/html

0

我需要识别的部分是0,也可以是1或2.

通过简单地将引脚设置为HIGH,该函数将成为turnOnAppropriateLight()或其他东西,而不是printData()。然后,这将激活继电器,为相应的LED阵列供电。

现在我已经写完了,看起来我只需要保留最后一个字符并根据值进行切换。 *(数据++)是令人困惑的部分,即使我知道它正在递增指针索引......我只是不确定如何直接转到该索引中的最后一个字符。不需要这个循环来吐出结果。

arduino and 4-relay board enter image description here

3 个答案:

答案 0 :(得分:2)

这并不强大,但是

Serial.print(data[len-1])

看看是什么让你

答案 1 :(得分:1)

这应该是你所需要的:

data[len - 1]

答案 2 :(得分:0)

您可能会神经质并解析每一行,或查找最后一个标签: Content-Type

我会将C风格的字符串转换为C ++ std::string,然后使用find_first方法查找关键字。

std::istringstream可用于将文本“0”转换为数字0。