Russian Qt Forum

Qt => Общие вопросы => Тема начата: a1ien от Июль 01, 2010, 18:56



Название: как лучше реализовать
Отправлено: a1ien от Июль 01, 2010, 18:56
http://pastebin.com/KC8d45bS
gr - QDataStream
opcode=(OpCodes) - enum
Размер OpCodes не вылазит за 16 бит но в файле хначение хранится по разному в зависимости от "типа" записи.
Есть вот такая идея.
Код:
qint16 op; gr>>op;
opcode=(OpCodes)op;
if (direction==Client) gr.skipRawData(2);
Может есть идея получше?


Название: Re: как лучше реализовать
Отправлено: SABROG от Июль 01, 2010, 23:13
Можно так попробовать.

Код
C++ (Qt)
qint32 op;
gr >> op;
if (direction == Client)
   op = static_cast<quint16>(op);
opcode = static_cast<OpCodes>(op);
 


Название: Re: как лучше реализовать
Отправлено: a1ien от Июль 01, 2010, 23:41
Неее.
Тут вобще другая логика у вас.
Вы сразу читаете qint32.
А у меня(грубо говоря от предыдущего считанного значения) зависит размер данных которые мы должны прочитать дальше.


Название: Re: как лучше реализовать
Отправлено: SABROG от Июль 02, 2010, 09:02
А так?

Код
C++ (Qt)
qint32 op = 0;
quint16 const& rop = op;
if (direction == Client)
   gr >> rop;
else
   gr >> op;
opcode = static_cast<OpCodes>(op);
 


Название: Re: как лучше реализовать
Отправлено: a1ien от Июль 02, 2010, 22:08
packetreader.cpp: In constructor 'PacketReader::PacketReader(const QString&)':
packetreader.cpp:20:15: error: no match for 'operator>>' in 'gr >> rop'