У меня есть много многомерных массивов, как показано ниже. Они заполнены определенными ценностями, конечно.
uint8_t data[32][64][32];
Как я могу сжать такие массивы в памяти и затем сохранить их как *.zip
архивы на жесткий диск?
libzip это библиотека сжатия и распаковки ZIP, которая позволяет работать как с буферами памяти, так и с файлами.
Вы должны рассказать нам немного больше о своей проблеме, чтобы получить конкретный ответ. Вам нужно переместить эти файлы на другой компьютер? Размеры массивов всегда одинаковы?
В простейшем случае, когда вы просто хотите сохранить данные — всегда в одном и том же формате — и использовать их только на своем компьютере с одинаковым кодом, все, что вам нужно, — это библиотека сжатия. я использовал http://www.quicklz.com/ раньше, и это очень легко интегрировать. В этом случае тот факт, что это многомерный массив, не имеет значения, равно как и тип данных. Просто наведите указатель на первый элемент и длину компрессора и сохраните результат в файл (который вы можете назвать .zip, если хотите). Затем, когда вы захотите перезагрузить его, прочитайте файл, передайте его декомпрессору и приведите результат в массив с такими же размерами.
Для более вероятного случая, когда у вас есть разные типы массивов, и вы хотите, чтобы они были доступны для чтения на других устройствах (и с другим программным обеспечением), я предлагаю вам использовать что-то вроде http://www.hdfgroup.org/HDF5/ это позволит вам хранить данные в структурированном виде, включая тип данных (с порядком байтов и т. д.).
Взгляни на libarchive (Лицензия BSD). Он очень мощный и у вас есть жесткий контроль над вашими данными: вы можете объединять различные блоки памяти в виде «файлов» внутри сжатого файла (например, .tar.gz). Есть несколько хорошие уроки внутри.