Russian Qt Forum

Qt => Вопросы новичков => Тема начата: AlphaGh0St от Январь 22, 2015, 09:11



Название: QString побайтовый вывод
Отправлено: AlphaGh0St от Январь 22, 2015, 09:11
Всем привет!
Выполняю побайтовый вывод строки:
Код:
    QString str = "hello";

    for (int i = 0; i < str.size(); ++i)
    {
        uchar byte = str[i].unicode();
        qDebug("str[%d] = %c", i, byte);
    }
В выводе получаю:
Цитировать
str[0] = h
str[1] = e
str[2] = l
str[3] = l
str[4] = o

А если QString инициализировать строкой "привет", то в выводе получим:
Цитировать
str[0] = ?
str[1] = @
str[2] = 8
str[3] = 2
str[4] = 5
str[5] = B

Подскажите, как вывести русские символы?
Благодарю.


Название: Re: QString побайтовый вывод
Отправлено: Пантер от Январь 22, 2015, 09:14
Код
C++ (Qt)
ushort QChar::​unicode() const
 
Сравни возвращаемое значение.


Название: Re: QString побайтовый вывод
Отправлено: AlphaGh0St от Январь 22, 2015, 09:18
А как было бы правильно?


Название: Re: QString побайтовый вывод
Отправлено: Пантер от Январь 22, 2015, 10:04
Кириллица в юникоде представлена не одним байтом. Почитай про UTF.


Название: Re: QString побайтовый вывод
Отправлено: AlphaGh0St от Январь 23, 2015, 16:12
Про UTF читал. Ладно, поставим вопрос иначе: нужно побайтно вывести строку русских символов. Пусть хранимую не в QString. Как это можно сделать?


Название: Re: QString побайтовый вывод
Отправлено: Пантер от Январь 23, 2015, 16:15
QString::toLocal8Bit()


Название: Re: QString побайтовый вывод
Отправлено: AlphaGh0St от Январь 27, 2015, 19:14
Возник другой вопрос: а как из юникода перевести русские символы в ASCII?


Название: Re: QString побайтовый вывод
Отправлено: kambala от Январь 27, 2015, 19:28
в ASCII не существует русских символов. какая конкретно кодировка тебя интересует (куда вывести хочешь)?


Название: Re: QString побайтовый вывод
Отправлено: AlphaGh0St от Январь 27, 2015, 19:55
Вывести хотя бы в дебаг посимвольно. Примерно так:
Код:
 любой_контейнер str = "привет";

    for (int i = 0; i < str.size(); ++i)
    {
        uchar byte = str[i];
        qDebug("str[%d] = %c", i, byte);
    }


Название: Re: QString побайтовый вывод
Отправлено: kambala от Январь 27, 2015, 23:21
в виндовой консоли там CP866 кажется, за креатор не скажу. юниксы вроде утф8 спокойно понимают.
Код
C++ (Qt)
QString str = "тест";
for (int i = 0; i < str.size(); ++i)
   qDebug() << "str[" << i << "] = " << str.at(i);
Цитировать
str[ 0 ] =  'т'
str[ 1 ] =  'е'
str[ 2 ] =  'с'
str[ 3 ] =  'т'
проверял в Qt 5, выводил в консоль креатора. значит, утф8 она понимает.


Название: Re: QString побайтовый вывод
Отправлено: AlphaGh0St от Январь 28, 2015, 10:37
Дело в том, что мне нужно каким-то боком представить русские символы одним байтом...


Название: Re: QString побайтовый вывод
Отправлено: __Heaven__ от Январь 28, 2015, 10:58
Гуглите "cp866 таблица"


Название: Re: QString побайтовый вывод
Отправлено: kambala от Январь 28, 2015, 23:28
ну сконвертируй строку в вин1251 например, или в cp866 как выше подсказывают