Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Горбаг
141 / 141 / 48
Регистрация: 25.09.2014
Сообщений: 749
Завершенные тесты: 2
#1

QDataStream вижу количество байт, но не могу их вывести

11.05.2015, 23:57. Просмотров 427. Ответов 4
Метки нет (Все метки)

Добрый день.

Принимаю поток с устройства. Вижу N байт в потоке через bytesAvailable() - столько, сколько и должно быть.

Однако я никак не могу их прочитать. Всегда читается пустое значение. В примерах Шлее видно, что в клиенте и сервере при формировании и чтении потока используются переменные одинаковых типов (для каждой части датаграммы).

Мне кажется, проблема у меня в том, что я использую неправильные типы данных при приеме. Отсюда два вопроса:

1) Какой тип данных нужно использовать, чтобы корректно принять тип DWORD?
2) Может ли кто-то привести пример приема датаграммы из потока в массив ByteArray()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2015, 23:57
Ответы с готовыми решениями:

Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты
Дан массив из 10 байт. Посчитать количество байт,в которых сброшены 6 и 4 биты....

Дан массив из 11 байт. Подсчитать количество байт с нечетным числом 1 в байте
Дан массив из 11 байт. Подсчитать количество байт с нечетным числом 1 в...

Дан массив из 10 байт. Посчитать количество байт содержащих ровно три единицы
Здравствуйте, возникла проблема с решением задачи: "Дан массив из 10 байт....

Дан массив из 6 байт. Посчитать количество байт число единиц, в которых не превышает 3.
Дан массив из 6 байт. Посчитать количество байт число единиц, в ко- торых не...

Дан массив из 10 байт. Посчитать количество байт с числом единиц в байте равным три.
помогите с задачкой! Дан массив из 10 байт. Посчитать количество байт с числом...

4
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
12.05.2015, 00:07 #2
По моему вы обратились не по адресу.
Это вам на ТНТ в "Битву экстрасенсов" надо.

А здесь полагается выкладывать часть кода, в которой возникли проблемы.
0
schdub
Эксперт С++
3030 / 1374 / 419
Регистрация: 19.01.2009
Сообщений: 3,664
Завершенные тесты: 1
12.05.2015, 00:44 #3
Горбаг, здравствуйте.
1) quint32;
2)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//...
 
    QByteArray data;
 
    {// write
    QDataStream stream(&data, QIODevice::WriteOnly);
    QString string("Hello!");
    quint32 bitsCount = string.length() << 3;
 
    stream << string;          qDebug() << "1" << data.toHex();
    stream << string.toUtf8(); qDebug() << "2" << data.toHex();
    stream << bitsCount;       qDebug() << "3" << data.toHex();
    }
 
    {// read
    QDataStream stream(&data, QIODevice::ReadOnly);
    QString string;
    QByteArray array;
    quint32 bitsCount;
 
    stream >> string;    qDebug() << "string =" << string;
    stream >> array;     qDebug() << "array =" << array.toHex();
    stream >> bitsCount; qDebug() << "bitsCount =" << bitsCount;
    }
 
//...
Почему такой вывод в 'Application Output' поможет разобраться:
http://doc.qt.digia.com/4.6/datastreamformat.html
1
Горбаг
141 / 141 / 48
Регистрация: 25.09.2014
Сообщений: 749
Завершенные тесты: 2
12.05.2015, 09:29  [ТС] #4
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void MyServer::slotReadClient()
{
    QTcpSocket* pClientSocket = (QTcpSocket*)sender();
    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_5_4);
    for (;;) {
        if (!m_Data) {
            bytesCount = pClientSocket->bytesAvailable();
 
            if (pClientSocket->bytesAvailable() < 0)
            {
                break;
            }
            in >> array;     qDebug() << "array =" << array.toHex();
            bytesCount = pClientSocket->bytesAvailable();
 
        }
 
        bytesCount = pClientSocket->bytesAvailable();
 
        QString strMessage =
            "Client has sended - " + m_Data;
        m_ptxt->append(strMessage);
 
        m_Data = 0;
    }
}
По-прежнему на выходе получаю пустоту.
array = ""
0
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
12.05.2015, 09:56 #5
Цитата Сообщение от Горбаг Посмотреть сообщение
2) Может ли кто-то привести пример приема датаграммы из потока в массив ByteArray()?
C++ (Qt)
1
array = pClientSocket->readAll();
1
12.05.2015, 09:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2015, 09:56

Дан массив из 13 байт. Посчитать количество байт содержащих только нули или единицы
ПОЖАЛУЙСТА! РЕШИТЕ ЗАДАЧКИ!!!:) Задача №1 дан массив из 13 байт. посчитать...

Посчитать в файле количество нулевых байт и различных байт
Посчитать в файле кол-во нулевых байт и различных байт Кто решит буду весьма...

Как вывести 10 байт после определенных байт из файла
Здравствуйте. Есть к примеру файл с расширением *.bin, подскажите как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru