![]() |
|
Модераторы: bsa |
![]()
|
|
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
mes
Спасибо! Только не очень понял код Судя по количеству байт:
Не очень понял по Вашему коду, что обозначает число 0x07? Понял, что 0x7F - это проверка условия на значение большее, чем 127, но 0х07 - это, вроде бы, 7 в десятичной? А зачем эта проверка делается? Такое чего-то я нигде не читал( В целом смысл кода понятен, но откуда вот это число взялось непонятно. Кстати, я бы там в цикле не size(), а ( size() - 1 ) ставил бы, поскольку идёт выход за границу для s[ i + 1 ]. С substr - классный подход вообще получился! Спасибо! Добавлено через 10 минут и 47 секунд Не очень вообще понимаю как узнать в UTF-8 сколька байтный символ сейчас перед нами. Смотрю в таблицу: http://www.utf8-chartable.de/unicode-utf8-...24&utf8=dec я разложил там по 10-тичным значениям для удоства. http://www.utf8-chartable.de/unicode-utf8-...24&utf8=dec т.е.: 224 176 130, 224 176 134. Как их отличить-то? Все числа одновременно больше 127... Мне подумалось, может логика такая, что если очередное число больше 127, то следующее число добавляем в текущее... но нет ведь! Добавлено через 14 минут и 26 секунд Аа, вот оно что. Оказывается та инфа о диапазонах указывала на порядковый номер символа в ЮТФ кодировке. Ок: http://www.utf8-chartable.de/unicode-utf8-...24&utf8=dec т.е. начинающиеся с номера 2048, действительно, идут 3х-байтовыми. Но блин, как узнать какой у символа порядковый номер в ЮТФе? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Добавлено @ 14:32
там было else забыто.. (поправил).. а насчет границ, так под напильник же ) Это сообщение отредактировал(а) mes - 1.6.2013, 14:39 |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Упс, всё равно не пойму, что именно Вы выделили полужирным
Вроде 0x000007FF в десятичной это: 2047, а 0х07 это 7 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
А что уже std::wstring str = L"123абв"; уже отменили ???
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Разве что я вижу такую зависимость в терминах десятичного счисления: если первое число больше 223, то отсюда начинаются уже трёхбайтные значения. Соответственно, нужно просто прочесать все такие диапазоны и поставить строгие условия, типа: если первый символ больше n, но меньше m, то соответственно он составляет столько-то байт.
Добавлено через 2 минуты и 47 секунд mes АА, понятно. Спасибо за ответ! Тем не менее, порыв таблицу, вроде я сориентировался уже. Спасибо Вам за помощь! Вы мне очень помогли! Плюсанул в репутацию |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
так и делается в примере.. Добавлено через 4 минуты и 50 секунд если вычесть диапазон, к которому принадлежит символ, то останется смещение символа в таблице для этого диапазона.. итого 4 таблицы разной длины (по длине диапазона) |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
ну ну, искатели приключений ...
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Proger10 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Это я видел вчера) но тоже по-моему многова-то кода для такой, как я понял уже, простой задачи Добавлено через 36 секунд
А почему? Вроде всё же разрешилось легко? Добавлено через 6 минут и 56 секунд Кстати, вот единственное, что осталось ещё непонятым в UTF-8, так это вот это указание:
это о каком одном и том же символе речь идёт? Если например символ выглядит одинаково во многих языках, выбрать надо тот, порядковый номер, которого, короче? Так что ли? |
||||||
|
|||||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Что разрешилось то?
угу. еще свой СТЛ напишите, делов то... Команду тестеров нанять не забудьте только, по отлову багов... |
||||
|
|||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
volatile
Ну вроде задачу более-менее понял, попробую реализовать, а там посмотрю, может и правда гемор будет огромный, но пока вроде ничего беды не предвещает Правда у меня сейчас большая проблема в основах C++))) Я не знаю как мне в std::string вообще закидывать эти UTF-8 коды =) Не подскажете? =) Задача такая: знаю десятичные коды (да и любые удобные для системы), если десятичные то последовательность двух: "208 176" - это последовательность буквы "а". А вот как эту последовательность мне записать в std::string переменную? Добавлено @ 03:51 Хотя... полагаю, так?
Работает Это сообщение отредактировал(а) Proger10 - 2.6.2013, 04:18 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |