Название: QDataStream запись/чтение int8,int16,float,double Отправлено: Fregloin от Октябрь 06, 2013, 10:57 Привет. Пишу свою обертку для чтения/записи Universal Binary JSON над QtJson.
Нужно писать/читать данные четкой размерности, как то байтиы, слова, двойные слова и т.п. Сейчас разработка идет в x64, но формат подразумевает четкие размеры данных. Проблема в том, что при записи QDataStream_object<<int8 фактически записывается 4 байта вместо одного. Неужели придется задействовать write/readRawData? Вот фрагмент кода: Код:
Смотрю что в файле, а в файле 00 00 00 'Z'. Может я что то недопонял. Ах да, данные будут отправляться и читаться с сервера, который написан без использования Qt/C++ - голый Си. Название: Re: QDataStream запись/чтение int8,int16,float,double Отправлено: Hellraiser от Октябрь 06, 2013, 11:17 А в каком стандарте enum есть char???
Название: Re: QDataStream запись/чтение int8,int16,float,double Отправлено: Fregloin от Октябрь 06, 2013, 11:22 А что ему мешает перевести 'Z' -> код символа?
скажем так, если я хочу записать 1 байт например так stream<<(qint8)0xFF или так stream<<static_cast<quint8>(0xFF) то все равно пишется четрые байта. Мне же нужно добиться того, что бы в поток не писались лишние нули. Т.е. при записи байта пишется 1 байт, при слове - 2 байта, при целом/float - 4 байта, при int64/double - 8 байт. Название: Re: QDataStream запись/чтение int8,int16,float,double Отправлено: Fregloin от Октябрь 06, 2013, 11:25 Хм, частично рахзобрался с проблемой, почему то запись вида
Код: static const char marker = UBJSON_FLOAT; Код: stream<<(quint8)UBJSON_FLOAT; Название: Re: QDataStream запись/чтение int8,int16,float,double Отправлено: kambala от Октябрь 06, 2013, 11:25 у меня при касте всегда пишется правильное количество байт.
а чем не нравится rawData? размер легко вычислить через sizeof для POD-типов. Название: Re: QDataStream запись/чтение int8,int16,float,double Отправлено: Fregloin от Октябрь 06, 2013, 11:37 ничего против rawData не имею, но не хотелось заморачиваться с приведением типов и вычислениями офсетов при чтении и записи, если уже это реализовано до меня. Пока вроде разобрался. не стоит полагаться на оператор << >> без явного указания типа.
Название: Re: QDataStream запись/чтение int8,int16,float,double Отправлено: kambala от Октябрь 06, 2013, 12:53 при чтении/записи через rawData позиция потока перемещается, а не остается на месте (так же, как и для операторов >> <<)
|