Russian Qt Forum

Qt => Вопросы новичков => Тема начата: thechicho от Ноябрь 08, 2011, 13:55



Название: QStringList in bytes
Отправлено: thechicho от Ноябрь 08, 2011, 13:55
как узнать размер в байтах? или он какой-то стандартный идет?


Название: Re: QStringList in bytes
Отправлено: LisandreL от Ноябрь 08, 2011, 14:14
Что значит размер в байтах? Общий объём занимаемой памяти всеми элементами или что?


Название: Re: QStringList in bytes
Отправлено: thechicho от Ноябрь 08, 2011, 15:11
ну в байтах же память и измеряется.
да, общий объём занимаемой памяти всеми элементами, как узнать можно


Название: Re: QStringList in bytes
Отправлено: kambala от Ноябрь 08, 2011, 15:21
наверное так:
Код
C++ (Qt)
int total = 0;
foreach (const QString &s, list)
   total += s.toUtf8().size();


Название: Re: QStringList in bytes
Отправлено: LisandreL от Ноябрь 08, 2011, 15:33
наверное так:
Код
C++ (Qt)
int total = 0;
foreach (const QString &s, list)
   total += s.toUtf8().size();
Совсем неправильно. В QString символы хранятся в 16-ти битном виде, да и сами внутренние структуры QList и QString что-то да весят.


Название: Re: QStringList in bytes
Отправлено: kambala от Ноябрь 08, 2011, 16:19
я так понимаю ТС хочет узнать именно размер данных, а не переменных (для последнего должен подойти sizeof). латинские символы реально используют лишь 1 байт, а не 2, а toUtf8() это учитывает если не ошибаюсь. но если использовать принудительно 16 бит, тогда total += s.length() * 2;


Название: Re: QStringList in bytes
Отправлено: LisandreL от Ноябрь 08, 2011, 18:27
я так понимаю ТС хочет узнать именно размер данных
Я переспрашивал выше. Он ответил общий объём.

для последнего должен подойти sizeof
sizeof c указателями? Не прокатит.

латинские символы реально используют лишь 1 байт, а не 2, а toUtf8() это учитывает если не ошибаюсь
Цитировать
UTF-16 там, а не UTF-8:QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character. (Unicode characters with code values above 65535 are stored using surrogate pairs, i.e., two consecutive QChars.)
так что латинские занимают 2 байта (а не 1), а некоторые экзотические символы - 4 байта.