Russian Qt Forum
Май 19, 2024, 08:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как лучше реализовать  (Прочитано 3238 раз)
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);
Может есть идея получше?
Записан
SABROG
Гость
« Ответ #1 : Июль 01, 2010, 23:13 »

Можно так попробовать.

Код
C++ (Qt)
qint32 op;
gr >> op;
if (direction == Client)
   op = static_cast<quint16>(op);
opcode = static_cast<OpCodes>(op);
 
Записан
a1ien
Гость
« Ответ #2 : Июль 01, 2010, 23:41 »

Неее.
Тут вобще другая логика у вас.
Вы сразу читаете qint32.
А у меня(грубо говоря от предыдущего считанного значения) зависит размер данных которые мы должны прочитать дальше.
Записан
SABROG
Гость
« Ответ #3 : Июль 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);
 
Записан
a1ien
Гость
« Ответ #4 : Июль 02, 2010, 22:08 »

packetreader.cpp: In constructor 'PacketReader::PacketReader(const QString&)':
packetreader.cpp:20:15: error: no match for 'operator>>' in 'gr >> rop'
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.086 секунд. Запросов: 18.