• Система автоматизации с открытым исходным кодом на базе 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);
}
}
 
Сверху Снизу