Обнаружение символов в C ++ char stream - PullRequest
3 голосов
/ 10 февраля 2011

Я работаю над фрагментом кода Arduino, который использует версию BlackWidow со встроенным Wi-Fi. Используя библиотеку WiServer.h, я использую пример SimpleClient.pde с модами для отправки вызова на веб-сервер, который будетпросто верните целое число - 0, 1 или 2. Конечной целью является включение булавки для правильного красного, зеленого или желтого цвета стоп-сигнала.Целые числа представляют совокупное состояние нашего Хадсона.

Я ленивый ублюдок 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 цикла, без новой строки до новогоoutput):

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 () эта функция станет turnOnAppresponLight ()или что-то, просто установив штифт на HIGH.Затем это активирует реле для питания соответствующего светодиодного массива.

Теперь, когда я написал это, похоже, мне просто нужно сохранить последний символ и выполнить переключение на основе значения.* (Data ++) - запутанная часть, хотя я знаю, что он увеличивает индекс указателя ... Я просто не уверен, как перейти непосредственно к последнему символу в этом индексе.Нет необходимости в этом цикле, чтобы выплюнуть результат.

arduino and 4-relay board enter image description here

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Это не надёжно ВСЕ, но

Serial.print(data[len-1])

Посмотрите, что вам это даст

1 голос
/ 10 февраля 2011

это должно быть все, что вам нужно:

data[len - 1]
0 голосов
/ 10 февраля 2011

Вы можете быть невротиком и анализировать каждую строку или искать последние теги: Content-Type :.

Я бы преобразовал строку в стиле C в C ++ std::string, а затем использовал метод find_first для поиска ключевых слов.

std::istringstream может использоваться для преобразования из текста "0" в числовой 0.

...