Название: qint64 в QByteArray Отправлено: YvenTitan от Август 25, 2016, 10:27 Здравствуйте, не подскажете, как сделать, чтобы qint64 занимал в QByteArray именно 4 байта даже если значение, хранящееся в qint64 помещается в 1 байт?
Делаю так: QByteArray ar(1,0); qint64 iAr = 3; //(при разных значениях получаю один и тот же размер QByteArray) ar.append(iAr); qDebug()<<"size = "<<ar.size(); Название: Re: qint64 в QByteArray Отправлено: Bepec от Август 25, 2016, 10:41 А оно разве не 8 байт должно ? 64 то?
Очень просто - берём битовые операции и запихиваем по одному вплоть до полного удовлетворения. Название: Re: qint64 в QByteArray Отправлено: YvenTitan от Август 25, 2016, 10:48 Спасибо!
Название: Re: qint64 в QByteArray Отправлено: Bepec от Август 25, 2016, 10:54 Так же если стороны обе на Qt (и приёмная и передающая), можно использовать QDataStream.
Название: Re: qint64 в QByteArray Отправлено: kuzulis от Август 25, 2016, 11:14 Даже если просто есть обе стороны и какой-то формат общения. Наличие Qt на другой стороне не обязательно, если передаются простые типы int, float (обычно этого достаточно). Название: Re: qint64 в QByteArray Отправлено: qate от Август 25, 2016, 18:39 QByteArray b(4, 0);
*(qint32*)(b.data()) = 123; не ? Название: Re: qint64 в QByteArray Отправлено: Bepec от Август 25, 2016, 19:03 qate это что вы изобразили? :D
Взять указатель на char* преобразовать в quint32, разъыменовать и присвоить 123? Надо попробовать. PS тема про quint64 как бы. И в нём 8 байт должно быть :D PPS Нормально работает. Но на первый взгляд вызывает ужас :D Название: Re: qint64 в QByteArray Отправлено: Racheengel от Август 25, 2016, 20:21 PPS Нормально работает. Но на первый взгляд вызывает ужас :D тю, а чего ужасного то? классический сишный поинтер... Название: Re: qint64 в QByteArray Отправлено: Bepec от Август 25, 2016, 20:55 Выглядит жутковато. Не буст, но нечто похожее :D
Название: Re: qint64 в QByteArray Отправлено: Авварон от Август 25, 2016, 21:05 Ага, только так делать нельзя
Название: Re: qint64 в QByteArray Отправлено: Igors от Август 26, 2016, 05:48 Выглядит жутковато. Не буст, но нечто похожее :D А можно и такКод
тю, а чего ужасного то? классический сишный поинтер... То они опускают как морально устаревшее :)Название: Re: qint64 в QByteArray Отправлено: Old от Август 26, 2016, 06:23 Код
Название: Re: qint64 в QByteArray Отправлено: Bepec от Август 26, 2016, 07:53 Assert зачётный, сразу же сработает :D
ba.data() char[0], size 8 + sizeOf(val) 8 = ba.data[9] :D Название: Re: qint64 в QByteArray Отправлено: Igors от Август 26, 2016, 09:27 Assert зачётный, сразу же сработает :D Ну это вряд ли. Хотя хз, "самый строгий" компилятор может и это пропустит :)ba.data() char[0], size 8 + sizeOf(val) 8 = ba.data[9] :D Название: Re: qint64 в QByteArray Отправлено: Old от Август 26, 2016, 09:34 Ну это вряд ли. Хотя хз, "самый строгий" компилятор может и это пропустит :) А причем здесь компилятор? assert проверяет рантайм.А в вашем коде он будет срабатывать постоянно. Конечно, можно поиграться с размером QByteArray, но вряд-ли кого устроят массивы в несколько Гб для хранения 64-битного числа... :) Название: Re: qint64 в QByteArray Отправлено: Igors от Август 26, 2016, 09:42 Цитировать ..на котором красовалась надпись ВАСТОК-2 :)Я подошел и исправил обе ошибки: ВОСТОГ-2 Название: Re: qint64 в QByteArray Отправлено: Old от Август 26, 2016, 09:43 Цитировать ..на котором красовалась надпись ВАСТОК-2 :)Я подошел и исправил обе ошибки: ВОСТОГ-2 Название: Re: qint64 в QByteArray Отправлено: qate от Август 26, 2016, 12:46 Название: Re: qint64 в QByteArray Отправлено: YvenTitan от Август 26, 2016, 13:24 QByteArray b(4, 0); А как после этого из QByteArray опять в qint32 перевести?*(qint32*)(b.data()) = 123; не ? Название: Re: qint64 в QByteArray Отправлено: qate от Август 26, 2016, 15:23 qint32 i123 = *(qint32 *)b.data()
Название: Re: qint64 в QByteArray Отправлено: Racheengel от Август 26, 2016, 16:57 Хотя вот мне лично главная проблема видится в следующем:
"чтобы qint64 занимал в QByteArray именно 4 байта" qint64 будет всегда и везде занимать 8 байт (64 бита / 8 бит). Иначе, это уже не qint64. Это qint32. Запись qint32 в QByteArray гарантирует размещение всех 4 байт. Зачем пляски с бубнами вокруг неправильной задачи? :) Название: Re: qint64 в QByteArray Отправлено: qate от Август 26, 2016, 21:29 Зачем пляски с бубнами вокруг неправильной задачи? :) ну есть неправильная задача, бубен всегда есть, отчегож не сплясать, раз просят ? ) |