| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QString->UCS2 |
| Автор: Shadowlord 18.5.2012, 11:58 | ||
| Задача стоит получить из строки последовательность в ucs2 тоесть к примеру: входная строка=Привет выходная строка=041f04400438043204350442 Записав данные просто в Qstring
получаю строку : \320\277\321\200\320\270\320\262\320\265\321\202 test Как её преобразовать в UCS2 не соображу |
| Автор: math64 18.5.2012, 17:10 | ||
Насколько я понял, тебе нужно это:
|
| Автор: borisbn 18.5.2012, 17:19 | ||
| math64, если input - это QString, то operator[] возвращает QChar, и, по-моему, его нельзя так преобразовывать правильнее сделать так
http://qt-project.org/doc/qt-4.8/qstring.html#operator-5b-5d-2 http://qt-project.org/doc/qt-4.8/qchar.html#unicode-2 |
| Автор: Shadowlord 18.5.2012, 18:06 | ||
| Проверил оба варианта, как и сказал borisbn, вариант math64 не работает из-за типов. Но и второй вариант не дал нужного результата взям
Я получил из строки "п" в памяти дебагер говорит это "\320\277" строку "208.00000000000000000000000000000000000191.00000000000000000000000000000000000 " . А нужно получить"041F" |
| Автор: bsa 18.5.2012, 21:43 | ||
попробуй использовать метод QString::utf16:
|
| Автор: math64 18.5.2012, 22:24 | ||||
| 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() может не заканчиваться нулём, а иногда нуль - законный символ в середине строки. Лучше воспользоваться длиной строки, для определения её конца. |
| Автор: Shadowlord 19.5.2012, 06:57 | ||
все варианты , результат у всех один и тот же
После смены кодека мвходная строка в памяти уже хранится как \2077 что воспринимается как один символ. врезультате получается строка "1087.00000000000000000000000000000000000" Ух извеняюсь не ту сстроку брал для "П" "1055.00000000000000000000000000000000000" собственно десятичный вид 041f того что нужно но вот нужно именно 16 ричный |
| Автор: _GRIN_ 19.5.2012, 09:20 | ||||
Как то так:
Лог выполнения (исходная строка набрана в кодировке Utf8):
|
| Автор: Shadowlord 19.5.2012, 11:30 |
| _GRIN_, по твоему варианту я тоже получил "1055.00000000000000000000000000000000000" а нужно в 16 системе 041f Не пойму где я неправ Закралось не хорошее подозрение, и я проверил в отдельном новом проекте, там проработало правильно. Вот только ушлти нули с лева, а мне их нужно оставить. Буду разираться что у меня в проекте не так. Попробовал не допиывать в уже существующию строку значение, а писать в пустую, перевод пошел коректный, остался вопрос как сохранить нули Решил проблему с нулями , правда не совсем элеганто, просто проверяю на сколько строка менбше 4 и дописываю сколько не хватает нулей в начало |
| Автор: Shadowlord 19.5.2012, 12:23 |
| math64, borisbn,bsa,_GRIN_, большое Спасибо за помощь |