Arduino функция String.indexOf - странное поведение.
Добавлено: Ср май 10, 2023 12:53:04
Кто-нибудь сталкивался с таким странным поведением функции String.indexOf ?
Широко известный модуль SIM800 после выполнения AT команды возвращает ответ.
Ответ забирается в String переменную, где потом функцией indexOf ищется последовательность символов.
И эта примитивная конструкция не работает - последовательность символов точно присутствует в строке, но indexOf возращает -1.
Ломая голову, выяснил, что SIM800 по какой-то причине в ответе первым символом возвращает 0. Причём, не символ 0 (цифра), а именно ASCII с кодом 0.
Почему SIM800 так делает отдельный разговор (от этой китайской херни можно ожидать чего угодно), а вот почему indexOf ничего не находит в такой строке - загадка.
И ещё можно было бы понять такое поведение, если бы наличие нуля означало бы для indexOf конец строки, как в стандартных статических строках C\C++, так хрен там - функция length показывает правильную длину строки, но увеличенную на 1 - тот самый \0 в начале. И, если этот \0 удалить, indexOf начинает работать правильно.
Почему indexOf этот \0 не игнорирует? В документации об этом ни слова. Чего я не понимаю?
Широко известный модуль SIM800 после выполнения AT команды возвращает ответ.
Ответ забирается в String переменную, где потом функцией indexOf ищется последовательность символов.
И эта примитивная конструкция не работает - последовательность символов точно присутствует в строке, но indexOf возращает -1.
Ломая голову, выяснил, что SIM800 по какой-то причине в ответе первым символом возвращает 0. Причём, не символ 0 (цифра), а именно ASCII с кодом 0.
Почему SIM800 так делает отдельный разговор (от этой китайской херни можно ожидать чего угодно), а вот почему indexOf ничего не находит в такой строке - загадка.
И ещё можно было бы понять такое поведение, если бы наличие нуля означало бы для indexOf конец строки, как в стандартных статических строках C\C++, так хрен там - функция length показывает правильную длину строки, но увеличенную на 1 - тот самый \0 в начале. И, если этот \0 удалить, indexOf начинает работать правильно.
Почему indexOf этот \0 не игнорирует? В документации об этом ни слова. Чего я не понимаю?