Qt: задать размерность QByteArray

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

Qt: задать размерность QByteArray

Сообщение IMB »

Доброго дня!
Для работы с сетью использую write и передаю ему QByteArray с данными. Я точно знаю, что в мои данные будут содержать только данные uint8.
В частности мне будет необходимо передавать ip-адрес IPV4.

Код: Выделить всё

QByteArray send(5, 0);
send[0] = command;

quint32 address = QHostAddress(data).toIPv4Address();
send[1] = (address >> 24);
send[2] = ((address >> 16) & 0xFF);
send[3] = ((address >> 8) & 0xFF);
send[4] = (address & 0xFF);

Судя по документации QByteArray по-умолчанию работает с данными типа char, но в моём случае это не совсем удобно.
Вопрос - могу ли я задать, что QByteArray содержит в себе данные типа uint8 или придётся увеличивать размер массива?
Спасибо.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Qt: задать размерность QByteArray

Сообщение Crazy »

В чем неудобство?

Desipere in loco
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Qt: задать размерность QByteArray

Сообщение IMB »

Crazy писал(а):
22.05.2011 19:01
В чем неудобство?

Согласитесь, проше передать октет адреса за один ра, чем помнить, что его надо сперва разделить на две части.
Да и потом при чтении надо будет не забыть собрать число.
Назовём это здоровой ленью.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Qt: задать размерность QByteArray

Сообщение Crazy »

Оно?

Код: Выделить всё

QString add("127.0.0.1");
QHostAddress loop(add);

quint32 address = loop.toIPv4Address();
QByteArray foo;
foo.append ( reinterpret_cast<char *>(&address) , sizeof(quint32) );

Desipere in loco
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Qt: задать размерность QByteArray

Сообщение IMB »

IP-адрес является частным случаем, но за пример спасибо.
Другой частный случай - получение сетевых настроек (адрес, маска и гейт), которые считываются также в QByteArray.
Значит QByteArray не позволяет задать свою размерность, что ж, будем работать с char.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Qt: задать размерность QByteArray

Сообщение Crazy »

Есть же протокол, который определяет какие типы и в каком порядке передаются.

Desipere in loco
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Qt: задать размерность QByteArray

Сообщение Crazy »

Пример из C++ GUI Programming with Qt 4
У QDataStream operatorr<< перегружен на все q(u)int8-64

Код: Выделить всё

void TripPlanner::sendRequest()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_1);
    out << quint16(0) << quint8(’S’) << fromComboBox->currentText()
        << toComboBox->currentText() << dateEdit->date()
        << timeEdit->time();
    if (departureRadioButton->isChecked()) {
        out << quint8(’D’);
    } else {
        out << quint8(’A’);
    }
    out.device()->seek(0);
    out << quint16(block.size() - sizeof(quint16));
    tcpSocket.write(block);
    statusLabel->setText(tr("Sending request..."));
}

Desipere in loco
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Qt: задать размерность QByteArray

Сообщение IMB »

Эта книга у меня есть в русском переводе, обязательно посмотрю.
Спасибо сказали: