Как преобразовать эту длинную строку?
У меня есть строка
"id,порт,пароль,ssid,задержка,флаг,класс,категория"
Подскажите, пожалуйста, как это сделать с помощью stringtok и узнать значение "флага" (0 или 1)?
Вот что я пробовал:
void setup()
{
char input[] = {"id,port,password,ssid,delay,flag,class,category"};
char *ptr;
Serial.begin(115200);
ptr = strtok(input, ",");
Serial.println(ptr);
while (ptr != NULL) {
ptr = strtok(NULL, ",");
Serial.println(ptr);
}
}
void loop(){}
@Jonson, 👍1
Обсуждение1 ответ
Для строк с таким фиксированным форматом (я предполагаю, что это фиксированный формат...) я обычно просто вручную делаю strtok всего этого в набор указателей. Нет необходимости в петле. Затем вы можете просто протестировать последний, чтобы увидеть, правильно ли все это токенизировано, поскольку, если что-то до этого выйдет из строя, все остальные последующие потерпят неудачу, а последний не будет выполнен.
void setup()
{
char input[] = {"id,port,password,ssid,delay,flag,class,category"};
char *ptr;
Serial.begin(115200);
char *id = strtok(input, ",");
char *port = strtok(NULL, ",");
char *password = strtok(NULL, ",");
char *ssid = strtok(NULL, ",");
char *delay = strtok(NULL, ",");
char *flag = strtok(NULL, ",");
char *class = strtok(NULL, ",");
char *category = strtok(NULL, ",");
if (category != NULL) { // Сработало все до категории включительно
Serial.print("Flag: ");
Serial.println(flag);
}
}
void loop(){}
Кроме того, если есть шанс, что какое-либо из полей может быть пустым (например, флаг, категория), вам следует использовать strsep()
вместо strtok ()
, как я подробно описал в своем руководстве по разбиению строк в C.
- Очень простая операция Arduino Uno Serial.readString()
- Как преобразовать строку в массив байтов
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Arduino: как записать значение переменной в текстовый файл и изменить его на SD-карте?
- Буфер char в String в Arduino UNO
- Сохранить начальный ноль HEX в строку RFID RC522 Arduino
- Разделение Serial.readString на массив строк
Я бы удалил { и } в
char input[] = {"id,port,password,ssid,delay,flag"};
, @JurajДаже с (бесполезными) фигурными скобками, которые Джурай предлагает удалить, ваш код работает так, как ожидалось. Пожалуйста, уточните, в чем именно заключается ваша проблема., @Edgar Bonet
как отдельно взята подстрока «флаг»? какую модификацию я хочу сделать в программе?, @Jonson
исходя из должности? 6-й пункт?, @Juraj