Например TDA7294

Форум РадиоКот • Просмотр темы - Arduino функция String.indexOf - странное поведение.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср июл 30, 2025 23:49:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Arduino функция String.indexOf - странное поведение.
СообщениеДобавлено: Ср май 10, 2023 12:53:04 
Друг Кота
Аватар пользователя

Карма: 61
Рейтинг сообщений: 1537
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3328
Откуда: Казань
Рейтинг сообщения: 0
Кто-нибудь сталкивался с таким странным поведением функции 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 не игнорирует? В документации об этом ни слова. Чего я не понимаю?

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция String.indexOf - странное поведение.
СообщениеДобавлено: Ср май 10, 2023 13:23:34 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1639
Откуда: KN34PC, Болгария
Рейтинг сообщения: 7
indexOf(...): для того, чтобы функция давала -1, есть две причины:
Код:
1. if (found == NULL) return -1;
2. if (fromIndex >= len) return -1;

для len:
Код:
unsigned int len;       // the String length (not counting the '\0')

Все это видно в папках Arduino:
Код:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\

файлы: WString.cpp и WString.h
---
Упс ... для AVR в Arduino IDE или для "чистого" AVR? Думаю, что то же самое с AVR.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция String.indexOf - странное поведение.
СообщениеДобавлено: Ср май 10, 2023 13:35:05 
Друг Кота
Аватар пользователя

Карма: 61
Рейтинг сообщений: 1537
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3328
Откуда: Казань
Рейтинг сообщения: 0
veso74, ну, с fromIndex всё просто - я его не передаю в функцию вообще, поэтому он никак не может быть больше len.

Но вот указание файла исходника помогло разобраться, спасибо.

Я грешным делом думал, что String.indexOf - самостоятельная реализация, а это оказалась тупо обёртка над классической функцией strchr, которая, разумеется, видя \0 первым символом, считает строку нулевой таки длины и понятно что ничего не находит.

Мда, бывает же.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция String.indexOf - странное поведение.
СообщениеДобавлено: Ср май 10, 2023 13:42:00 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1639
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
String в Arduino уже String class. Многие вещи там сделаны для "пользы пользователя".
А если привыкли к старым способам "сделай сам", это становится путаницей :).


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y