Буфер char в String в Arduino UNO
String getAPIData()
{
char res_buffer[450];
int numdata = inet.httpGET("myserver.com", 80, "/call.php?id=1&q=1&code=1001", res_buffer, 450);
String result = String(res_buffer);
Serial.println(result);
Serial.println(numdata);
return result;
}
Вывод по серийному номеру:
15:52:07.208 ->
15:52:07.208 -> 393
Но когда я печатаю буфер по циклу, я получаю следующий результат:
HTTP/1.1 200 OK
Date: Mon, 16 Sep 2019 06:28:59 GMT
Server: Apache
X-Powered-By: PHP/7.2.20
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: PHPSESSID=5b21eeac22dcf61f2e4d2efd579d437c; path=/
Upgrade: h2,h2c
Connection: Upgrade, close
Vary: Accept-Encoding,User-Agent
Content-Type: text/html; charset=UTF-8
-1
Я не уверен, почему буфер символов не преобразуется в строку в Arduino UNO.
Есть известные проблемы? Предложите, если требуется какое-либо исправление.
1 ответ
▲ 2
Не используйте строку. И особенно не используйте String так, как вы его используете.
Подробнее о том, почему нет, можно прочитать здесь.
Вместо этого используйте только буферы char*
.
Правильный способ сделать то, что вы хотите, — определить буфер вне вашей функции, а затем передать этот буфер функции для заполнения:
int getAPIData(char *buf, int maxlen) {
return inet.httpGET("myserver.com", 80, "/call.php?id=1&q=1&code=1001", buf, maxlen);
}
Затем вы вызываете его с помощью:
char *my_buffer[450];
getAPIData(my_buffer, 450);
Serial.println(my_buffer);
,
@Majenko
Смотрите также:
- Очень простая операция Arduino Uno Serial.readString()
- Как преобразовать строку в массив байтов
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Arduino: как записать значение переменной в текстовый файл и изменить его на SD-карте?
- Сохранить начальный ноль HEX в строку RFID RC522 Arduino
- Разделение Serial.readString на массив строк
- Как объединить строки и текст вместе?
Не используйте строку. Это не подходит для цели. Нет причин когда-либо использовать String., @Majenko
Скорее всего, у вас заканчивается память, а выделение строк не происходит. Вам нужно 450 байт для буфера, 450 байт для используемой вами строки и еще 450 байт для возвращаемой строки. Это 1350 байт из максимальных 2048 только для этой функции., @Majenko