Russian Qt Forum

Qt => Общие вопросы => Тема начата: qtист от Апрель 16, 2009, 13:57



Название: Вопрос по QByteArray
Отправлено: qtист от Апрель 16, 2009, 13:57
есть вот такой код:

 
Код
C++ (Qt)
QByteArray  arrBlock;
QDataStream out(&arrBlock, QIODevice::WriteOnly);
out << quint16(0) <<  "s";

т.е. занесено число 0(2 байта) и символ 's'.

А если посмотреть размерность arrBlock,то она равна 8

Откуда? :o


Название: Re: Вопрос по QByteArray
Отправлено: crackedmind от Апрель 16, 2009, 14:00
Цитировать
А если посмотреть размерность arrBlock,то она равна 8
Как смотришь?


Название: Re: Вопрос по QByteArray
Отправлено: qtист от Апрель 16, 2009, 14:05
так:
quint16 N=arrBlock.size();


Название: Re: Вопрос по QByteArray
Отправлено: Rcus от Апрель 16, 2009, 14:08
typeof("s") <> typeof('s') :)


Название: Re: Вопрос по QByteArray
Отправлено: whirlwind от Апрель 16, 2009, 17:44
странно, почему-то даже char('s') запихивается как четыре байта, вместо одного. Только quint8('s') делает один байт


Название: Re: Вопрос по QByteArray
Отправлено: Sergeich от Апрель 16, 2009, 18:49
В случае out <<  "s" вызывается QDataStream & operator<< ( const char * s ), он сначала записывает 4 байта - длину строки, потом строку, заканчивающуюся нулем - получаем sizeof(quint32) + sizeof("s\0") = 6 байт
В случае out <<  char('s'), поскольку метода operator<< ( char s ) у QDataStream нет, char преобразуется в int и вызывается QDataStream::operator<<(qint32 i)