копирование char в QbyteArray с потоком данных содержит несколько дополнительных байтов

Обзор проблемы:
ОС: Ubuntu

Я использую утилиту qt для получения видеоданных с удаленного компьютера (удаленный компьютер использует gstreamer для отправки данных в реальном времени) и записываю эти данные в порт, скажем, 5000.

Порт 5000 уже привязан к другой утилите gstreamer. эта утилита прослушивает порт 5000 и преобразует данные в потоковое видео. Очевидно, что что-то не работает, и я не могу просматривать видео. Итак, у меня есть два вопроса:

1) С помощью утилиты Qt разрешено ли писать в порт 5000, хотя порт привязан к утилите gstreamer.

2) Я использую стороннюю библиотеку и ее API для получения данных из внешнего источника. Данные сохраняются в массиве символов. Если я преобразую это в qbytearray, то qbytearray будет иметь тот же размер, что и буфер char. пример

rc = zco_receive_source(sdr, &reader, bytesToRead, buffer); // this is 3rd part function


      qDebug() << " copy buffer size =" << rc; // genrally this size is 1412

       QByteArray msgRecvd;

       msgRecvd = QByteArray(reinterpret_cast<char*>(buffer), rc);

        if(! msgRecvd.isEmpty() )
        {
            qDebug() << " size of msgRecv =" << msgRecvd.size();// again 1412 

            udpSock->writeDatagram( msgRecvd, QHostAddress::LocalHost, 5000 );
       }

Но если я использую QDataStream, то QbyteArray получает 4 дополнительных байта. код показан ниже

rc = zco_receive_source(sdr, &reader, bytesToRead, buffer); // this is 3rd part function


    qDebug() << " copy buffer size =" << rc; // genrally this size is 1412

    QByteArray msgRecvd;
    QDataStream dataStream( &msgRecvd, QIODevice::WriteOnly );

    dataStream.writeBytes( ( const char* )buffer, rc );

    if(! msgRecvd.isEmpty() )
    {

       qDebug() << " size of msgRecv =" << msgRecvd.size();// got 4 extra bytes .. size is 1415. why ???

       udpSock->writeDatagram( msgRecvd, QHostAddress::LocalHost, 5000 ); 
    }

Я хочу знать, почему QbyteArray получил дополнительный символ и нужно ли сериализовать данные, чтобы перенаправить их на порт 5000?


person samprat    schedule 10.12.2015    source источник


Ответы (1)


Отвечая на второй вопрос: попробуйте QDataStream::writeRawData().

Сформируйте документы Qt:

QDataStream & QDataStream::writeBytes(const char * s, uint len)
Writes the length specifier len and the buffer s to the stream and returns a reference to the stream.
The len is serialized as a quint32, followed by len bytes from s. Note that the data is not encoded.
person kewl    schedule 10.12.2015
comment
Спасибо друг. это была ошибка копирования. Я изменил его. - person samprat; 10.12.2015