Russian Qt Forum
Сентябрь 30, 2024, 20:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString + коды ASCII  (Прочитано 14099 раз)
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" ; строку вида которого я привел выше
Спасибо
Записан
BRE
Гость
« Ответ #1 : Ноябрь 03, 2011, 18:20 »

QByteArray QString::toAscii () const
Записан
BuRn
Гость
« Ответ #2 : Ноябрь 03, 2011, 18:30 »

т.е. что-то типа
QString str = "Hello";
QbyteArray str1 = str.toAscii();
?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Ноябрь 04, 2011, 04:42 »

прямой функции нет. Либо вручную проходись по элементам массива и преобразуй каждый символ в нужный hex, и записывай результат в другую строку. Или используй QByteArray("hello").toHex(), но после этого тоже придётся самому вставлять дополнительные символы \x
Записан
andrew.k
Гость
« Ответ #4 : Ноябрь 04, 2011, 12:10 »

QByteArray QString::toAscii () const

Эта функция не переводит QString в ASCII. Смотри третий абзац описания в ассистенте.
Она просто преобразует QString в QByteArray.
Записан
andrew.k
Гость
« Ответ #5 : Ноябрь 04, 2011, 12:18 »

Всвязи с этим я так с ходу не понял как преобразовать к ASCII.

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

Пишу в коде
Код
C++ (Qt)
QString str = "test";
получаю по два байта на каждый символ итого 10 байт (плюс ноль в конце. или 9? не суть.).
Хочу получить в виде ASCII.
Код
C++ (Qt)
QByteArray ba = str.toAscii();
Дает мне массив из тех же 10 (или 9) байт!
Записан
BRE
Гость
« Ответ #6 : Ноябрь 04, 2011, 12:50 »

Я написал имя метода, читая описание которого (вместе с see also), можно со всем разобраться. Улыбающийся
Ключевая фраза как раз во втором абзаце и ведет она к QTextCodec. Если кодек для сишных строк устанавливался (а многие его для чего-то устанавливают), то будет происходить преобразование. А если еще внимательно почитать про QTextCodec, то вообще все вопросы связанные с кодировками отпадут. Подмигивающий
Записан
andrew.k
Гость
« Ответ #7 : Ноябрь 04, 2011, 13:18 »

Грамотно съехал? )

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

А Latin-1 это и есть ASCII?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #8 : Ноябрь 04, 2011, 14:25 »

в кодировке UTF-8
Дает мне массив из тех же 10 (или 9) байт!
Очень странно. "test" в utf-8 должен занимать 4 байта.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #9 : Ноябрь 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().
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
andrew.k
Гость
« Ответ #10 : Ноябрь 04, 2011, 14:59 »

в кодировке UTF-8
Дает мне массив из тех же 10 (или 9) байт!
Очень странно. "test" в utf-8 должен занимать 4 байта.
Да, я не совсем корректно написал. QString хранит в юникоде, поэтому массив получается по два байта на символ.
Записан
andrew.k
Гость
« Ответ #11 : Ноябрь 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 разные кодировки?
Записан
andrew.k
Гость
« Ответ #12 : Ноябрь 04, 2011, 15:07 »

Почитал на википедии про эти кодировки. Понял различие.
В общем пример, который я приводил, у меня был на днях.
В общем toAscii() возвращала двухбайтовое представление строки.
Записан
BuRn
Гость
« Ответ #13 : Ноябрь 05, 2011, 18:33 »

кому интересно , реализовал
Записан
andrew.k
Гость
« Ответ #14 : Ноябрь 05, 2011, 19:07 »

что именно?
выкладывай.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 22.