检测 C++ 字符流中的字符

Posted

技术标签:

【中文标题】检测 C++ 字符流中的字符【英文标题】:Detecting characters in C++ char stream 【发布时间】:2011-06-25 01:11:09 【问题描述】:

我正在编写一段 arduino 代码,该代码使用内置 wifi 的 BlackWidow 版本。使用 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() 是调用网络服务器的回调,运行时它会向串口监视器发送以下内容(这是 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。

这个函数不是 printData(),而是变成 turnOnAppropriateLight() 之类的,只需将 pin 设置为 HIGH。这将激活一个继电器,为相应的 LED 阵列供电。

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

【问题讨论】:

您需要知道流中的字符何时可用还是需要解析流中的字符? 【参考方案1】:

这根本不可靠,但是

Serial.print(data[len-1])

看看你会得到什么

【讨论】:

SimpleClientLights.cpp:在函数'void printData(char *,int)'中:SimpleClientLights:69:错误:'unary *'的类型参数无效 奇怪 - 出于某种原因,每个 GET 请求都会调用 printData 函数两次。某种 WiServer 的东西...【参考方案2】:

这应该就是你所需要的:

data[len - 1]

【讨论】:

【参考方案3】:

你可能神经兮兮地解析每一行,或者寻找最后的标签:Content-Type:。

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

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

【讨论】:

以上是关于检测 C++ 字符流中的字符的主要内容,如果未能解决你的问题,请参考以下文章

C ++从文件流中读取无符号字符

剑指Offer-54.字符流中第一个不重复的字符(C++/Java)

[Java基础]字符流中的编码解码问题

C - 分隔输入流中的字符串

关于响应编码在字符输出流和字节输出流中的总结

替换流中的某些字符