使用数据流将 char 复制到 QbyteArray 包含一些额外的字节

copying char to QbyteArray with datastream contains some extra bytes

问题概述:
OS : Ubuntu

我正在使用 qt 实用程序从远程机器接收视频数据(远程机器正在使用 gstreamer 发送实时数据)并将该数据写入端口 5000。

端口 5000 已经绑定到另一个 gstreamer 实用程序。该实用程序侦听端口 5000 并将数据转换为视频流。显然事情并不完全正常,我无法观看视频。所以我有两个问题:

1) 使用 Qt 实用程序,写入端口 5000 是否合法,尽管端口已绑定到 gstreamer 实用程序。

2) 我正在使用第 3 方库及其 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?

回答第二个问题: 尝试 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.