Как преобразовать массив символов в строку в коде arduino

#arrays #string #char #arduino-ide

#массивы #строка #голец #arduino-ide

Вопрос:

У меня есть проект по сбору веб-страницы html и преобразованию ее в набор строк для печати. Я использую arduino IDE для кодирования этого приложения, поэтому Java и другие решения не работают, поскольку они должны быть приняты arduino IDE. Массив символов должен использоваться для сбора входящих символов, но для сохранения результатов мне нужна строка. Эти строки должны иметь возможность принимать все символы, включая конец строки, возврат каретки и табуляцию. Html не использует нулевые символы, поэтому строка все еще может быть правильно завершена.

Я попытался поместить нулевой символ в конец полученной строки в массиве символов, но строка по-прежнему имеет нулевую длину. Я просмотрел ardunio.cc и на этом веб-сайте, но все ответы касаются того, как преобразовать строки в массивы или прокомментированы, что этот вопрос задавался ранее и на него НЕ было ответа. На этот вопрос нет ответа в действительном коде arduino, поскольку даже написание процедуры, которая добавляет отдельные символы в строку, проходит компилятор, но не создает строку при запуске!

 String tempStr = "";
int count2 = 0;

char message[700];

for (int count = 0; count < htmlpage.length(); count  ) // maximum string length
{
      bufferchr =0;
      bufferchr = (htmlpage.charAt(count2 lencount1));
      message[count2] = bufferchr;
      count2 = count2  1;
}
tempStr = chararryToStr(message); // fails
tempStr=(message);   // also fails
  

Количество не существует вне цикла, его значение равно нулю. Я включил count2 для измерения длины результирующей строки в массив сообщений.

Все содержимое строки выводится как нулевая длина, где при печати массива символов отображаются истинные результаты.

Этот ответ не удается скомпилировать на Arduino Uno и выдает следующие ошибки, которые связаны с тем, что ядро arduino не принимает предлагаемый код. Arduino: 1.8.8 (Windows 8.1), плата: «Arduino / Genuino Uno» ead_string_arduino:69:11: ошибка: не соответствует ‘operator=’ (типы операндов ‘String’ и ‘String *’) tempStr = новая строка (сообщение); // приведите его к строке нулевой длины ^ В файле, включенном из C:Program Files (x86) Arduino hardware arduino avr cores arduino/Arduino.h:222:0, из C:UsersstephenAppDataLocalTemparduino_build_685202sketchread_string_arduino.ino.cpp:1 : C:Program Files (x86) Arduino hardwarearduino avr coresarduino/WString.h:86:11: примечание: кандидат: Строка amp; String::operator=(const Stringamp;) Строка amp; operator = (const String amp; rhs); ^ C:Program Files (x86) Arduino hardware arduino avr cores arduino/WString.h:86:11: примечание: неизвестное преобразование для аргумента 1 из ‘String *’ в ‘const Stringamp;’ C:Program Файлы (x86) Arduino hardware arduino avr cores arduino/ WString.h:87:11: примечание: кандидат: Строка и String::operator=(const char*) Строка и оператор = (const char cstr); ^ C:Program Files (x86)Arduino hardwarearduino avrcoresarduino/WString.h:87:11: примечание: неизвестное преобразование для аргумента 1 из ‘String‘ в ‘const char *’ C:Program Файлы (x86)Arduino аппаратное обеспечениеarduino avr ядраarduino/WString.h:88:11: примечание: кандидат: Строка и строка::оператор=(const __FlashStringHelper*) Строка и оператор = (const __FlashStringHelper str); ^ C:Program Files (x86)Arduino hardwarearduinoavrcoresarduino/WString.h:88:11: примечание: неизвестное преобразование для аргумента 1 из ‘String‘ в ‘const __FlashStringHelper*’ статус выхода 1 не соответствует ‘operator=’ (типы операндов ‘String’ и ‘String*’)

Ответ №1:

Для lencount1 нет объявления, поэтому не совсем уверен, что делает ваш код, но, несмотря на это, это слишком сложно.

Во-первых, чтобы скопировать строку C в массив C, существует несколько способов сделать это, но strncpy(message, html.c_str(), sizeof (message));

это, наверное, самое простое.

Чтобы скопировать строку C в другую строку C , и предполагая, что htmlpage тоже является строкой, вам просто нужно tempStr = htmlpage;

Комментарии:

1. к сожалению, я уже пробовал это, и вы не можете превратить массив c в строку, поскольку Arduino делает его постоянным объектом, доступным только для чтения. Вы также не можете распечатать его или отправить на последовательное устройство, которое принимает только строки. Это вопрос Arduino, а не вопрос C

2. Arduino — ЭТО C . Это то, что скрывается под маской. В исходном вопросе нет указаний на то, что такое «htmlpage». В любом случае, да, вы можете превратить массив C в строку. Возможно, вам придется «извлечь» указатель и использовать нечто большее, чем простую операцию ‘=’, но это выполнимо. Однако для достижения наилучшего результата нам нужно увидеть объявление htmlpage

3. Это было слишком длинно, чтобы включать, но вот небольшой образец. «<!DOCTYPE html>п<!—[if IE 7 ]><p class=»fastfree translation—welsh»><p>n<form id=»reg_form»» . is escape char needed to include some characters in a string.