* [devel] Странности с QT
@ 2011-11-02 19:10 Paul Wolneykien
2011-11-02 21:33 ` Hihin Ruslan
0 siblings, 1 reply; 6+ messages in thread
From: Paul Wolneykien @ 2011-11-02 19:10 UTC (permalink / raw)
To: ALT Linux Team development discussions
Всем привет.
Вопрос, прежде всего, к специалистам по QT.
На днях боролся с неполадками в Scribus
(http://bugs.scribus.net/view.php?id=10355). Дело оказалось в
преобразовании чисел, а при отладке я обнаружил, как мне кажется,
странное поведение QByteArray, QString либо QChar — точно сказать не могу:
(gdb) p bb->d->data
$1 = 0x8d83fb0 " "
(gdb) n
44 bb = bb.insert(0, in.at(3).cell());
(gdb) p bb->d->data
$2 = 0x9651068 " \305 "
(gdb) n
45 bb = bb.insert(1, in.at(2).cell());
(gdb) p bb->d->data
$3 = 0x9651068 " \320 \305 "
(gdb) n
46 bb = bb.insert(2, in.at(1).cell());
(gdb) p bb->d->data
$4 = 0x9651068 " \323 \320 \305 "
(gdb) n
58 bb = bb.insert(3, in.at(0).cell());
(gdb) p bb->d->data
$5 = 0x9651068 "\306 \323 \320 \305 "
Как видно, в bb добавляются не только байты из входной строки, но и
пробелы. Судя по последующему коду (http://clck.ru/OA-n) автор не
предполагал их наличия.
Проблему я решил, избавившись от использования как insert, так и
QString (http://clck.ru/OA0M). Однако интересно, является ли такое
поведение insert нормальным? Подумал, вдруг эта проблема затрагивает не
только Scribus.
Паша.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Странности с QT
2011-11-02 19:10 [devel] Странности с QT Paul Wolneykien
@ 2011-11-02 21:33 ` Hihin Ruslan
2011-11-02 22:44 ` Paul Wolneykien
0 siblings, 1 reply; 6+ messages in thread
From: Hihin Ruslan @ 2011-11-02 21:33 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 886 bytes --]
Здравствуйте Paul Wolneykien
В сообщении от 2 ноября 2011 Paul Wolneykien написал(a):
> Как видно, в bb добавляются не только байты из входной
> строки, но и пробелы. Судя по последующему коду
> (http://clck.ru/OA-n) автор не предполагал их наличия.
Да вроде пробел - такой-же символ как и любой другой.
Вставляется-то именно символ, а не слово . и не строка (там еще
можно говорить о роли пробела).
--
А ещё говорят так (fortune):
Hope that the day after you die is a nice day.
________________________________________________________________________
С уважением Хихин Руслан
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Странности с QT
2011-11-02 21:33 ` Hihin Ruslan
@ 2011-11-02 22:44 ` Paul Wolneykien
2011-11-03 4:32 ` Hihin Ruslan
0 siblings, 1 reply; 6+ messages in thread
From: Paul Wolneykien @ 2011-11-02 22:44 UTC (permalink / raw)
To: ALT Linux Team development discussions
03.11.2011 01:33, Hihin Ruslan пишет:
> Здравствуйте Paul Wolneykien
> В сообщении от 2 ноября 2011 Paul Wolneykien написал(a):
>> Как видно, в bb добавляются не только байты из входной
>> строки, но и пробелы. Судя по последующему коду
>> (http://clck.ru/OA-n) автор не предполагал их наличия.
>
> Да вроде пробел - такой-же символ как и любой другой.
> Вставляется-то именно символ, а не слово . и не строка (там еще
> можно говорить о роли пробела).
Я имел в виду, что пробел вставляется в дополнение к байту из исходной
строки in. Это нормально?
Судя по коду автор просто хотел аккуратно перенести 4 байта из in в
bb, меняя порядок при необходимости. А получается, что в записываются
только 2 байта из in, а в остальных двух позициях между ними — пробелы.
>
>
>
>
> _______________________________________________
> Devel mailing list
> Devel@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/devel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Странности с QT
2011-11-02 22:44 ` Paul Wolneykien
@ 2011-11-03 4:32 ` Hihin Ruslan
2011-11-03 5:04 ` Sergei Epiphanov
0 siblings, 1 reply; 6+ messages in thread
From: Hihin Ruslan @ 2011-11-03 4:32 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 2534 bytes --]
Здравствуйте 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"
________________________________________________________________________
С уважением Хихин Руслан
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Странности с QT
2011-11-03 4:32 ` Hihin Ruslan
@ 2011-11-03 5:04 ` Sergei Epiphanov
2011-11-03 6:59 ` Damir Shayhutdinov
0 siblings, 1 reply; 6+ messages in thread
From: Sergei Epiphanov @ 2011-11-03 5:04 UTC (permalink / raw)
To: ALT Linux Team development discussions
On 3 ноября 2011 08:32 Hihin Ruslan wrote:
> "The QChar class provides a 16-bit Unicode character.
На мой взгляд UTF16 тут ни причём. Вместо извращений с QByteArray, сдвигами и
прочим проще сделать
union{
uint ret;
char c[4];
}
И заполнив массив, получить на выходе нужное число. Кстати, функция getDouble
намекает на выдачу double, а не unsigned int.
--
С уважением, Епифанов Сергей
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Странности с QT
2011-11-03 5:04 ` Sergei Epiphanov
@ 2011-11-03 6:59 ` Damir Shayhutdinov
0 siblings, 0 replies; 6+ messages in thread
From: Damir Shayhutdinov @ 2011-11-03 6:59 UTC (permalink / raw)
To: ALT Linux Team development discussions
> На мой взгляд UTF16 тут ни причём. Вместо извращений с QByteArray, сдвигами и
> прочим проще сделать
>
> union{
> uint ret;
> char c[4];
> }
>
> И заполнив массив, получить на выходе нужное число.
Не надо так делать.Нужное число получится только при определенном
порядке байт процессора, приводя к странным эффектам на процессорах с
другим порядком байт.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-11-03 6:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-02 19:10 [devel] Странности с QT Paul Wolneykien
2011-11-02 21:33 ` Hihin Ruslan
2011-11-02 22:44 ` Paul Wolneykien
2011-11-03 4:32 ` Hihin Ruslan
2011-11-03 5:04 ` Sergei Epiphanov
2011-11-03 6:59 ` Damir Shayhutdinov
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git