解压 Zlib
Decompress Zlib
我在使用 zlib 和 Qt 解压缩时遇到问题。
我有 Asterix Cat 240 协议(雷达视频传输数据)提交的视频数据,应该用 zlib 压缩。
我将数据存储在 QByteArray
中并尝试像这样提取它:
QByteArray compressedRawVideoDataBlock;
QByteArray rawVideoDataBlock;
QVector <QVector <quint8>> videoDataBlock;
//Video Data
resize(rawAsterix.videoDataBlockREP);
for(int r = 0; r<videoDataBlockREP; r++)//index of Video Block
{
for(int b = 0; b<blockSize ; b++)//index of Video Byte
{
compressedRawVideoDataBlock.append(static_cast<quint8>(buffer->at(i)));
videoDataBlock[r].append(static_cast<quint8>(buffer->at(i)));
i++;
}
}
qDebug() << gzipDecompress(compressedRawVideoDataBlock, rawVideoDataBlock);
为了提取,我尝试了这个函数 (Zlib QCompressor),但它总是 returns false,我不确定为什么。
示例数据:
videoDataBlockREP=1
blockSize=64
compressedRawVideoDataBlock.toHex() = 7801edd0010d000000c2a0f74f6d0e37884061c0800103060c183060c0800103060c183060c0800103060c183060c0800103060cbc0f0c200000010000000000
因为您正在尝试使用 gzip 解压缩程序解压缩 zlib 流。这是两件不同的事情。如果将 inflateInit2
的第二个参数更改为 15
(而不是 15 + 16
),那么它应该可以工作。
在 zlib 流结束后还有五个无关的零字节。这不会导致失败,但那五个字节将保持未使用状态。
我在使用 zlib 和 Qt 解压缩时遇到问题。
我有 Asterix Cat 240 协议(雷达视频传输数据)提交的视频数据,应该用 zlib 压缩。
我将数据存储在 QByteArray
中并尝试像这样提取它:
QByteArray compressedRawVideoDataBlock;
QByteArray rawVideoDataBlock;
QVector <QVector <quint8>> videoDataBlock;
//Video Data
resize(rawAsterix.videoDataBlockREP);
for(int r = 0; r<videoDataBlockREP; r++)//index of Video Block
{
for(int b = 0; b<blockSize ; b++)//index of Video Byte
{
compressedRawVideoDataBlock.append(static_cast<quint8>(buffer->at(i)));
videoDataBlock[r].append(static_cast<quint8>(buffer->at(i)));
i++;
}
}
qDebug() << gzipDecompress(compressedRawVideoDataBlock, rawVideoDataBlock);
为了提取,我尝试了这个函数 (Zlib QCompressor),但它总是 returns false,我不确定为什么。
示例数据:
videoDataBlockREP=1
blockSize=64
compressedRawVideoDataBlock.toHex() = 7801edd0010d000000c2a0f74f6d0e37884061c0800103060c183060c0800103060c183060c0800103060c183060c0800103060cbc0f0c200000010000000000
因为您正在尝试使用 gzip 解压缩程序解压缩 zlib 流。这是两件不同的事情。如果将 inflateInit2
的第二个参数更改为 15
(而不是 15 + 16
),那么它应该可以工作。
在 zlib 流结束后还有五个无关的零字节。这不会导致失败,但那五个字节将保持未使用状态。