Функции lastIndexOf(val) и indexOf() не находят русских символов в подстроке.
- Войдите на сайт для отправки комментариев
Сб, 05/08/2017 - 20:18
Почему функции lastIndexOf(val) и indexOf() не находят русских символов в подстроке? И где исправить это в Arduino IDE ?
Находят, просто Вы не то ищете.
Не находят, у меня версия ide 1.6.8 нужно находить подстроки где содержаться однавременно и английские и русские символы (но походу это не важно, должно и те и др. одновременно находить).
Например читаю содержимое внешней EEPROM в буфер String. А в буфере ищу этими функциями что нужно, например:
а если например в буфере нужно найти ЁПXEROX с помощью команды:
Разумеется в буфере String buf_i2c_EEPROM имеется нужная информация.
Разумеется в буфере String buf_i2c_EEPROM имеется нужная информация.
Что заставляет Вас так думать? Я вот, уверен, что это не так.
Вы можете легко проверить: достаточно напечатать содержимое переменной buf_i2c_EEPROM посимвольно в виде чисел (кодов), и также посимвольно в виде чисел (кодов символов) напечатать константу "ЁПXEROX", и убедиться. что русские буквы в Вашей EEPROM и в Вашей константе записаны в разных кодировках.
Сделайте это и убедитесь сами.
А я понял, вы предлогаете напичатать в serial не по таблице ASCII а в битовом виде. Ок сейчас попробую. Действительно интересно. ;)
Зачем в битовом? Побайтно. Каждый байт, как число. И убедитесь, что кодировки разные.
В общем получил следующее строка "ЁПXEROX" в виде char моссива по битово выглядит так:
D0 81 D0 9F 58 45 52
А из String буфера тажа самая строка по битово выглядит так (точно так же как она записанна в EEPROM)
A8 CF 58 45 52 4F 58
Действительно кодировки разные используют char моссив и объект класса String. Вот только странно почему функции
lastIndexOf()
нужно указывать char моссив, а не подстроку объекта класса String.
Видимо нужно мне использовать другую функцию которая сравнивает 2 строки объекта класса.
Да, нет, Вам надо разобраться с кодировками. Чтобы кодировка в IDE (в константе, набранной руками) совпадала с кодировкой, которую Вы пишете в eeprom (не знаю, откуда Вы её берёте).
(не знаю, откуда Вы её берёте).
К сожелению в EEPROM я минять данные не могу это противоречет моему проекту. Я делаю чип-рессеттер (авто-программатор) для чипов (на базе 24сXX) лазерных картрыджей Ricoh и очень древних моделей Xerox & Samsung.
В общем задача этого прибора автоматически определять модель МФУ/принтера по идентификатору модели (содержится в первых 16 битах 24сXX). А затем на основе полученных данных прошивать нужную прошивку (дамп слитый с обсолютно нового чипа картрыджа). Все дампы слепленны в один и хроняться в SPI Flash.
Сам проект не новый, просто решил его перенести на Ардуино да и добавить новых моделей. Но не нравится мне этот ресеттер (просто попросили на соответствующем форуме) я собрал уже себе др. по круче, полноценный автономный программатор PortableProg - аналог PonyProg. Вот он мой PortableProg https://youtu.be/lUPYzY64ktQ вот эта тема мне нравится. А с этим авто-прогом сплоошная возня. :)
Здесь обсуждение PortableProg: http://www.testcopy.ru/forum/viewtopic.php?f=22&t=10649&sid=5aa4ae466f84a7392a7e42c2701a3508&start=100
krepton85, перечитайте внимательно сообщение №7. Похоже, Вы его просто не поняли.
Если все равно не поняли, рискну чуть подправить пост Евгения согласно опубликованной после его сообщения информации:
"Да, нет, Вам надо разобраться с кодировками. Чтобы кодировка в IDE (в константе, набранной руками) совпадала с кодировкой, которая используется в eeprom (не знаю, откуда Вы её берёте).
Да я понял, что это можно изменять с обеих старон, либо в EEPROM либо в самой команде buf_i2c_EEPROM.lastIndexOf("здесь")