Название: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 17, 2016, 17:43 Добрый день,
прошу подсказать как можно определить такую структуру (должна быть упакованной) и какой должен быть конструктор Код: struct MyPackage Название: Re: Структура с массивом переменной длины Отправлено: Igors от Февраль 17, 2016, 18:40 Если N приличное, то просто заменить varLenthArray на вектор. Можно и добавить поле N, заменить varLenthArray на указатель или индекс и хранить эти данные отдельно.
Название: Re: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 17, 2016, 18:57 Если N приличное, то просто заменить varLenthArray на вектор. Размер структуры через sizeof все равно не получится же узнать?Цитировать Можно и добавить поле N, заменить varLenthArray на указатель или индекс и хранить эти данные отдельно. Для передачи структуры по сети тогда придется копировать все в QBytearrayНазвание: Re: Структура с массивом переменной длины Отправлено: Old от Февраль 17, 2016, 19:04 Для передачи структуры по сети тогда придется копировать все в QBytearray Именно так и нужно делать, нельзя отправлять сырые структуры по сети. Нужно серилизовать данные с учетом сетевого порядка байт.Название: Re: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 18, 2016, 00:02 Именно так и нужно делать, нельзя отправлять сырые структуры по сети. Нужно серилизовать данные с учетом сетевого порядка байт. Т.е. никак не избежать дополнительных расходов на выделение памяти под QBytearray?P.S. И как все-таки посоветуете определить такую структуру с точки зрения удобства работы с ней. Название: Re: Структура с массивом переменной длины Отправлено: Racheengel от Февраль 18, 2016, 02:40 как вариант завернуть в юнион с байтовым массивом и передавать его по сетке
Название: Re: Структура с массивом переменной длины Отправлено: Igors от Февраль 18, 2016, 08:07 Размер структуры через sizeof все равно не получится же узнать? Размер данных - нет, в любом случае никогда не используйте sizeof для записи/чтения/передачи по сети - как бы заманчиво это ни казалось.Для передачи структуры по сети тогда придется копировать все в QBytearray Необязательно, лучше всего для передачи использовать тот же оператор <<Название: Re: Структура с массивом переменной длины Отправлено: Old от Февраль 18, 2016, 09:10 P.S. И как все-таки посоветуете определить такую структуру с точки зрения удобства работы с ней. Например так:Код
Название: Re: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 18, 2016, 14:34 Благодарю, попробую
Название: Re: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 20, 2016, 16:17 Нужно серилизовать данные с учетом сетевого порядка байт. Каждое поле, размером больше 1 байта придется конвертировать в big-endian?Можно ли сделать как-то для всей структуры автоматически? Название: Re: Структура с массивом переменной длины Отправлено: Old от Февраль 20, 2016, 16:44 Каждое поле, размером больше 1 байта придется конвертировать в big-endian? QByteArray+QDataStream решит все ваши проблемы. :)Можно ли сделать как-то для всей структуры автоматически? Название: Re: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 20, 2016, 17:04 В упор не вижу :(
Разве что это Код: QDataStream::QDataStream ( QByteArray * a, QIODevice::OpenMode mode ) Название: Re: Структура с массивом переменной длины Отправлено: Old от Февраль 20, 2016, 17:07 Код
Название: Re: Структура с массивом переменной длины Отправлено: Nidxogg от Февраль 20, 2016, 17:20 В моем понимании это и есть по полям.
Спасибо |