• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено String - копировать часть строки.

VktrSansara

New member
Всем привет, нужна помощь с копированием части строки, вообщем к примеру мы получаем строку вида "указатель.значение" / index.data / (так правильнее будет представить). "Указатель" определяется indexOf(); после чего нужно считать то что идет после "index.", можно даже учесть то что длинна указателя известна.
Может я как нуб полную дичь прогнал, но если есть какой пример кода, скиньте плз.
 

tretyakov_sa

Moderator
Команда форума
Всем привет, нужна помощь с копированием части строки, вообщем к примеру мы получаем строку вида "указатель.значение" / index.data / (так правильнее будет представить). "Указатель" определяется indexOf(); после чего нужно считать то что идет после "index.", можно даже учесть то что длинна указателя известна.
Может я как нуб полную дичь прогнал, но если есть какой пример кода, скиньте плз.
Если правильно понял вопрос, то например так:
Код:
// -------------------Выделяем строку от конца строки до маркера
String selectToMarkerLast (String str, String found) {
  int p = str.lastIndexOf(found);
  return str.substring(p + 1);
}
 

VktrSansara

New member
Спасибо.
Просто не знал про Substring:
StringSubstring Программирование Ардуино
Вроде бы слепил из кусков то что мне нужно, код как пример.
У меня же на деле прога с компа посылает в serial или по udp команду, которую нужно распознать и выполнить.
Вроде бы просто, до тех пор пока не встал вопрос передать цвет для ws2812)
В данном примере если послать строку типа "index.XXXXXX" где "XXXXXX" цвет в HEX, например input.fbdbc8 то в мониторе порта увидим следующее:
Код:
You have entered the data: 123
You have entered the data: index.fbdbc8
Without a prefix 'index.' : fbdbc8
DEC: 16505800
HEX: fbdbc8
Если послать с префиксом неверное значение то вернет 0, если вводить произвольные данные то будет просто возвращать их в монитор - You have entered the data: 123.

Скетч
Код:
void setup(){
  Serial.begin(9600);
}
void loop(){
String Var="";
while (!Serial.available()) delay(20);
delay(200);
while (Serial.available())
Var = Var + (char)(Serial.read());
Serial.print("You have entered the data: ");
Serial.println(Var);
Serial.end();
if (Var.indexOf("index.") != -1){
  String tmp = Var.substring(6);
  Serial.print("Without a prefix 'index.' : ");
  Serial.println(tmp);
  uint32_t asd = (uint32_t) strtol(&tmp[0], NULL, 16);
  Serial.print("DEC: ");
  Serial.println(asd);
  String zxc =  String(asd, HEX);
  Serial.print("HEX: ");
  Serial.println(zxc);
}
}
 
Сверху Снизу