![]() |
|
|
![]()
|
|
| Shadowlord |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 28.11.2006 Репутация: нет Всего: 5 |
Задача стоит получить из строки последовательность в ucs2
тоесть к примеру: входная строка=Привет выходная строка=041f04400438043204350442 Записав данные просто в Qstring
получаю строку : \320\277\321\200\320\270\320\262\320\265\321\202 test Как её преобразовать в UCS2 не соображу |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Насколько я понял, тебе нужно это:
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
math64, если input - это QString, то operator[] возвращает QChar, и, по-моему, его нельзя так преобразовывать
правильнее сделать так
http://qt-project.org/doc/qt-4.8/qstring.h...perator-5b-5d-2 http://qt-project.org/doc/qt-4.8/qchar.html#unicode-2 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Shadowlord |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 28.11.2006 Репутация: нет Всего: 5 |
Проверил оба варианта, как и сказал borisbn, вариант math64 не работает из-за типов. Но и второй вариант не дал нужного результата
взям
Я получил из строки "п" в памяти дебагер говорит это "\320\277" строку "208.00000000000000000000000000000000000191.00000000000000000000000000000000000 " . А нужно получить"041F" Это сообщение отредактировал(а) Shadowlord - 18.5.2012, 18:10 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
попробуй использовать метод QString::utf16:
|
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
1. У arg() первый аргумент должен быть ushort или uint, у тебя почему-то получается double или float.
2. В строке "п" - один символ, у тебя получается два. Видимо, кодек для CStrings не тот. Если исходники в utf8
или
Мой вариант не работает, потому что operator[](int) возвращает QCharRef. Если же const QString input; то operator[](int) const возвращает QChar. Но QChar тоже нужно превращать в ushort посредством unicode(); Вместо input[i] можно использовать input.at(i); Строка, возвращаемая QString::unicode() может не заканчиваться нулём, а иногда нуль - законный символ в середине строки. Лучше воспользоваться длиной строки, для определения её конца. Это сообщение отредактировал(а) math64 - 18.5.2012, 22:45 |
||||
|
|||||
| Shadowlord |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 28.11.2006 Репутация: нет Всего: 5 |
все варианты , результат у всех один и тот же
После смены кодека мвходная строка в памяти уже хранится как \2077 что воспринимается как один символ. врезультате получается строка "1087.00000000000000000000000000000000000" Ух извеняюсь не ту сстроку брал для "П" "1055.00000000000000000000000000000000000" собственно десятичный вид 041f того что нужно но вот нужно именно 16 ричный Это сообщение отредактировал(а) Shadowlord - 19.5.2012, 11:22 |
|||
|
||||
| _GRIN_ |
|
||||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Как то так:
Лог выполнения (исходная строка набрана в кодировке Utf8):
-------------------- Дорогу осилит идущий |
||||
|
|||||
| Shadowlord |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 28.11.2006 Репутация: нет Всего: 5 |
_GRIN_, по твоему варианту я тоже получил
"1055.00000000000000000000000000000000000" а нужно в 16 системе 041f Не пойму где я неправ Закралось не хорошее подозрение, и я проверил в отдельном новом проекте, там проработало правильно. Вот только ушлти нули с лева, а мне их нужно оставить. Буду разираться что у меня в проекте не так. Попробовал не допиывать в уже существующию строку значение, а писать в пустую, перевод пошел коректный, остался вопрос как сохранить нули Решил проблему с нулями , правда не совсем элеганто, просто проверяю на сколько строка менбше 4 и дописываю сколько не хватает нулей в начало Это сообщение отредактировал(а) Shadowlord - 19.5.2012, 12:23 |
|||
|
||||
| Shadowlord |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 28.11.2006 Репутация: нет Всего: 5 |
math64, borisbn,bsa,_GRIN_, большое Спасибо за помощь
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |