Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: BuRn от Ноябрь 03, 2011, 18:18



Название: QString + коды ASCII
Отправлено: BuRn от Ноябрь 03, 2011, 18:18
Вообщем хотелось бы узнать, на данный момент работаю с кассовым аппартом и на нем что бы напечатать строку, какую-либо, нужно ее перегнать в коды ASCII т.е. к примеру вот
x90\xA5\xA6\x2E\x20\xAF\xA5\xE7\x2E\x20\x20\x20\x20\x20\x20\x20\x20\x20
если честно не помню что за строка, но смысл я думаю ясен, чем можно перегонять строку , т.е. к примеру получить из QString str = "Hello" ; строку вида которого я привел выше
Спасибо


Название: Re: QString + коды ASCII
Отправлено: BRE от Ноябрь 03, 2011, 18:20
QByteArray QString::toAscii () const


Название: Re: QString + коды ASCII
Отправлено: BuRn от Ноябрь 03, 2011, 18:30
т.е. что-то типа
QString str = "Hello";
QbyteArray str1 = str.toAscii();
?


Название: Re: QString + коды ASCII
Отправлено: Alex Custov от Ноябрь 04, 2011, 04:42
прямой функции нет. Либо вручную проходись по элементам массива и преобразуй каждый символ в нужный hex, и записывай результат в другую строку. Или используй QByteArray("hello").toHex(), но после этого тоже придётся самому вставлять дополнительные символы \x


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 04, 2011, 12:10
QByteArray QString::toAscii () const

Эта функция не переводит QString в ASCII. Смотри третий абзац описания в ассистенте.
Она просто преобразует QString в QByteArray.


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 04, 2011, 12:18
Всвязи с этим я так с ходу не понял как преобразовать к ASCII.

Пример:
Условие задачи. Исходники в кодировке UTF-8.

Пишу в коде
Код
C++ (Qt)
QString str = "test";
получаю по два байта на каждый символ итого 10 байт (плюс ноль в конце. или 9? не суть.).
Хочу получить в виде ASCII.
Код
C++ (Qt)
QByteArray ba = str.toAscii();
Дает мне массив из тех же 10 (или 9) байт!


Название: Re: QString + коды ASCII
Отправлено: BRE от Ноябрь 04, 2011, 12:50
Я написал имя метода, читая описание которого (вместе с see also), можно со всем разобраться. :)
Ключевая фраза как раз во втором абзаце и ведет она к QTextCodec. Если кодек для сишных строк устанавливался (а многие его для чего-то устанавливают), то будет происходить преобразование. А если еще внимательно почитать про QTextCodec, то вообще все вопросы связанные с кодировками отпадут. ;)


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 04, 2011, 13:18
Грамотно съехал? )

Я понял. Т.е. из UTF-8 строки можно получить либо строку в кодировке CP1251 либо KOI8-R к примеру, которые являются однобайтовыми.
У QTextCodec нет кодировки ASCII в списке поддерживаемых.

А Latin-1 это и есть ASCII?


Название: Re: QString + коды ASCII
Отправлено: LisandreL от Ноябрь 04, 2011, 14:25
в кодировке UTF-8
Дает мне массив из тех же 10 (или 9) байт!
Очень странно. "test" в utf-8 должен занимать 4 байта.


Название: Re: QString + коды ASCII
Отправлено: kambala от Ноябрь 04, 2011, 14:33
А Latin-1 это и есть ASCII?
Цитата: QString::toAscii()
If a codec has been set using QTextCodec::setCodecForCStrings(), it is used to convert Unicode to 8-bit char; otherwise this function does the same as toLatin1().


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 04, 2011, 14:59
в кодировке UTF-8
Дает мне массив из тех же 10 (или 9) байт!
Очень странно. "test" в utf-8 должен занимать 4 байта.
Да, я не совсем корректно написал. QString хранит в юникоде, поэтому массив получается по два байта на символ.


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 04, 2011, 15:02
А Latin-1 это и есть ASCII?
Цитата: QString::toAscii()
If a codec has been set using QTextCodec::setCodecForCStrings(), it is used to convert Unicode to 8-bit char; otherwise this function does the same as toLatin1().
Note that, despite the name, this function does not necessarily return an US-ASCII (ANSI X3.4-1986) string and its result may not be US-ASCII compatible.

Это означает, что latin1 и ASCII разные кодировки?


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 04, 2011, 15:07
Почитал на википедии про эти кодировки. Понял различие.
В общем пример, который я приводил, у меня был на днях.
В общем toAscii() возвращала двухбайтовое представление строки.


Название: Re: QString + коды ASCII
Отправлено: BuRn от Ноябрь 05, 2011, 18:33
кому интересно , реализовал


Название: Re: QString + коды ASCII
Отправлено: andrew.k от Ноябрь 05, 2011, 19:07
что именно?
выкладывай.