[devel] Странности с QT
Hihin Ruslan
ruslandh на gmail.com
Чт Ноя 3 07:32:53 UTC 2011
Здравствуйте Paul Wolneykien
В сообщении от 3 ноября 2011 Paul Wolneykien написал(a):
> Я имел в виду, что пробел вставляется в дополнение к байту из
> исходной строки in. Это нормально?
Я так понимаю, что ошибка где-то раньше - в том, что туда попали
пробелы.
Не могу гарантировать, но IMHO - это нормально.
Как я понимаю, пробелы возникли из-за чего-то, связанного с
уникодом. Насколько я помню, QT хранит данные в юникоде (и даже
не utf8. а в чём-что ещё). И сколько занимает один символ - не
определено (зависит от языка и т.п.).
Теперь полез по справочникам:
Функция at вытаскивает символ типа QChar по индексу.
Вот - описание QCcar:
"The QChar class provides a 16-bit Unicode character.
In Qt, Unicode characters are 16-bit entities without any markup
or structure. This class represents such an entity. It is
lightweight, so it can be used everywhere. Most compilers treat
it like a unsigned short."
Т.е. один QChar занимает 2 байта.
QByteArray bb(4, ' '); - отводит 4 байта (не символа). IMHo
отсюда и проблема. 16-битный символ пытаются запихнуть в один
байт.
Т.е. должно быть что-то типа:
QByteArray bb(8, ' ');
bb = bb.insert(6, in.at(0));
bb = bb.insert(4, in.at(1));
bb = bb.insert(2, in.at(2));
bb = bb.insert(0, in.at(3));
Начсколько это верно, зависит от операции = (как приводятся типы
и т.п.)
Или
QChar bb[4]
bb = in.at(0);
....
bb = in.at(3));
Я конечно могу ошибаться, но ошибка возникает из-за представления
программиста, что символ занимает один байт.
--
А ещё говорят так (fortune):
The trouble with you Is the trouble with me. Got two good eyes
But we still don't see. -- Robert Hunter, "Workingman's Dead"
________________________________________________________________________
С уважением Хихин Руслан
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: This is a digitally signed message part.
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20111103/b4036f4d/attachment.bin>
Подробная информация о списке рассылки Devel