Есть текст: tester=1 Его нужно разделись опираясь на =, то есть в одну переменную поместить tester в другую 1. Подскажите пожалуйста как это реализовать.
Если вы знакомы с тем что из себя представляю строки в Си, то вопрос мне не ясен, в чем могут быть затруднения, если не знакомы, я вам настоятельно рекомендуется в этом разобраться. Поможет в будущем В целом приведу самый простой пример из разряда "В ЛОБ", он не безопасен и не учитывает множества аспектов, для которых надо четко понимать с какими данными мы будем иметь дело и чего именно мы хотим получить в итоге. Но в качестве общего примера пойдет. Код (Text): const int BUFF_SIZE = 32; char string[] = "tester=1"; char name[ BUFF_SIZE ] = {0}; char value[ BUFF_SIZE ] = {0}; // Адрес текущего символа в разбираемой строке char *current = string; // Отделяем название int i = 0; while ( *current != '=' ) { name[i] = *current; i++; current++; } name[i] = '\0'; current++; // Отделяем значение i = 0; while ( *current != '\0' ) { value[i] = *current; i++; current++; } value[i] = '\0'; В итоге у вас в масивах: name - tester\0 value - 1\0 \0 это NULL байт на конце для указания "конца" строки. Далее можете делать с этим что желаете, в частности если из единицы вы желаете получить целочисленое значеинние то функция atoi() вам поможет
Я ожидал увидеть меньше кода. В php подобную задачу можно реализовать так: Код (Text): $string = "a|b"; list($a, $b) = explode("|", $string); Может в arduino тоже есть "explode"?
В arduino воще ничего нет, это просто микроконтроллер установленный на плату с обвязкой. Есть только то, что есть в Cи, а работу со строками в Си - не назовешь удобной, сам мучаюсь
Ах, я думал вы желаете что-то типа понять как вообще можно разобрать строку, а вам нужна просто функция. Ну тогда можно делать например так. Код (Text): const int BUFF_SIZE = 32; char string[] = "tester=1"; char name[ BUFF_SIZE ] = {0}; int value = 0; sscanf(string, "%[a-z]=%i", name, &value); Но опять же, есть свои НО, это просто минимальный пример
Шикарный вариант. Спасибо большое. Скажите пожалуйста, с точки нагрузки на arduino, с каким вариантом arduino проще работать с первый или этим? Где меньше ресурсов расходует arduino?
Все функции входящие стандартные библиотеки С/С++ как правило хорошо и эффективно написаны. В вашем случае на тему производительности не стоит беспокоится, так как оптимизацию лучше делать тогда когда она действительно нужна, иногда преждевременная оптимизация может лишь навредить. В целом "прямой" парсинг четко известных данных будет всегда эффективнее нежели универсальные функции которые много чего проверяют и делают, но тут появляются свои проблемы как очень узкоспециализированности такого кода как и безопасности с багами, стандартные проверенны вдоль и поперек и о всех их подводных камнях как правило известно. Используйте стандартные, а когда решите что вам требуется оптимизация вот тогда уже и стоит искать где "срезать жирок" или наоборот "нарастить машцы"
Есть строка, в теле которой содержится code="ABC". На месте "ABC" могут быть любые буквенные символы. Как в Си задается маска для поиска? Пробую Код (Text): const char maska[] = "code=\"???"; Но мне кажется что это не работает.
Насколько я понимаю, в стандартных библиотеках для ардуино таких готовых функций нет. Придется реализовывать самому.
Во-первых, данный вариант требует после еще проверки значения первой части. Т.е. о готовой функции говорить не приходится. Во-вторых, поиск по маске должен искать не просто абстрактную строку, а конкретно code, результатом поиска является не целое, а строка, и я не уверен, что sscanf переварит что-то вроде "code=\"%3s\""? В третьих, а если строка не строго длиной 3 символа, а произвольной длины и с произвольным набором символов? sscanf, конечно, мощный инструмент, но несколько ограниченный.