2013-06-13 97 views
1

我有许多多维数组,如下所示。当然,它们充满了特定的价值。如何将内存数组压缩到* .zip压缩文件中?

uint8_t data[32][64][32]; 

我怎么能压缩在内存中这样的阵列,然后将它们存储为*.zip档案到硬盘驱动器?

+1

通过使用ZIP压缩库和'fwrite()'。 – 2013-06-13 10:48:20

+0

你建议使用什么压缩库,以及如何直接压缩内存数组?我从现在开始只听说过压缩文件。但我不想在压缩之前将所有内容都存储在一个大文件中。 – danijar

+0

[libzip](http://nih.at/libzip) – 2013-06-13 12:23:01

回答

3

libzip是一个ZIP压缩和解压缩库,允许一个在内存缓冲区以及文件上运行。

1

你应该告诉我们更多关于你的问题,以便给出具体的答案。你需要将这些文件移动到不同的机器上吗?数组的维数是否总是相同?

在最简单的情况下,您只需要存储数据 - 始终使用相同的格式,并且只能在具有相同代码的计算机上使用它,您只需要一个压缩库。我之前使用过http://www.quicklz.com/,并且它非常易于集成。在这种情况下,它是一个多维数组并不重要,数据的类型也不重要。只需将一个指针指向第一个元素和压缩器的长度,并将结果保存到一个文件中(如果你喜欢,可以命名为.zip)。然后,当您想重新加载它时,请阅读文件,将其交给解压缩器,并将结果转换为具有相同尺寸的数组。

对于更有可能的情况下,你有不同类型的数组,并希望它们可以在其他设备(和其他软件)上读取,我建议你使用类似http://www.hdfgroup.org/HDF5/的东西,这将允许您将数据存储在结构包括数据类型(包括字节顺序等)。

+0

这是关于拯救类似Minecraft的游戏的世界。数组的维数总是相同的,但我会存储不同数量的这些数组。生成的文件可以被移动到其他计算机上,并且也可以在那里被相同的应用程序读取。 – danijar

1

看看libarchive(BSD许可证)。它非常强大,并且可以严格控制数据:您可以在压缩文件(例如.tar.gz)中将不同的内存块组合为“文件”。里面有几个nice tutorials