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

Обзор проблемы:
ОС: 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 functionqDebug() << " 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 functionqDebug() << " 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?

2

Решение

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

Форма Qt docs:

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.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]