如何使用qt类型的压缩读取BLOB?

时间:2019-05-21 17:48:25

标签: qt compression binaryfiles

我有一个文件(具体来说大约是10万个文件),其中包含来自天气雷达的数据-一个文件就是一个雷达图像。它是来自多个雷达的数据的拼接图,创建了整个国家的反射率图。 这些文件的扩展名为.cmax,我需要将它们转换为更有用的东西(例如,反射率数组)以备将来使用。

我问数据提供者如何读取这些文件。他们回答:

  

我们系统中的标准产品格式(.cmax)是向我们提供软件的公司的内部格式。它由xml和二进制部分组成。可以通过读取为字节流来读取它。首先,将初始字节解析为xml,然后将其余(BLOB)视为使用“ qt”方法压缩的二进制数据。您需要使用支持此压缩模式的库来解压缩它们。通常,您需要做一些工作,但实际上可以使用任何编程语言来完成。

主要问题在于数据的二进制部分。我试图用zlib解压缩它(搜索出qt压缩),并在C ++中读取为二进制数据。他们都没有工作。在Qt中尝试以二进制形式读取数据对我来说似乎也不合理。

文件以以下几行开头:

<product version="5.44.5" datetime="2017-01-01T18:00:00" datatype="dBZ" type="cmax" name="CMAX" owner="">
   <data time="18:00:00" date="2017-01-01">

然后是雷达规格和图像详细信息(有源雷达,最小和最大反射率等)。 XML部分以:

结尾
</product>
<!-- END XML -->
<BLOB blobid="0" size="79617" compression="qt">(here are lots of binary data)</BLOB>

我正在寻找一种方法(工具?)来转换二进制数据。例如,可能是提到的库。

2 个答案:

答案 0 :(得分:1)

看细节,这很可能是 Leonardo (Selex/Gematronic) Rainbow5 格式。 zlib 是解压的正确库。但是有一些技巧。在 wradlib 库 (https://github.com/wradlib) 中实现了一个 Python 阅读器。也许您可以适应该代码。免责声明:我是 wradlib 开发者之一。

答案 1 :(得分:0)

您只是尝试使用qUncompress()函数吗? https://doc.qt.io/qt-5/qbytearray.html#qUncompress