LINUX.ORG.RU

Работа с QByteArray

 


0

1

QDataSteam - это очень удобно, но как я поняла, даже при записи простейших типов идет запись избыточной информации.

Как быть, если мне нужно записать, а затем прочитать данные в строго определенной последовательности.

Например: 1 байт (char) - тип сообщения 2-3 байты (unsigned int) - какой-то нормер

Сейчас я делаю так: Запись:

    QByteArray byteArray;
    byteArray.append(some_char);
    byteArray.append(some_number);
    return byteArray;
Чтение:
    some_char = byteArray[0];
    memcpy(&some_number, byteArray.data() + 1, sizeof(some_number));

Есть в Qt удобные средства работы с двоичными данными аналогичные QDataStream, но не дополняющие их служебной информацией?



Последнее исправление: totik (всего исправлений: 1)

емнип, нету. но что-то наподобие этого можно замутить для простых случаев:

template<class T>
QIODevice& operator<<(QIODevice& device, const T& data)
{
    device.write((char*)&data, sizeof(T));
    return device;
}

template<class T>
QIODevice& operator>>(QIODevice& device, T& data)
{
    device.read((char*)&data, sizeof(T));
    return device;
}

    QBuffer buf;
    buf.open(QIODevice::ReadWrite);
    buf << 54;
    buf.seek(0);
    int a = 0;
    buf >> a;
    qDebug() << a;



только в больших проектах перегрузку операторов лучше заменить на класс, а то по шапке надают.

dib2 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

а я сижу и думаю: обленились совсем, структуры и массивы их уже не устраивают! :)

Iron_Bug ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.