要使用zlib压缩/解压缩数据,首先需要设置一个名为z_stream
的结构。 z_stream
有两个非常量指针next_in
和next_out
。C++ - 在常量数据中使用zlib
如果我想要做这样的功能:
void ungzip(std::vector<unsigned char>& dst,const std::vector<unsigned char>& src)
{
z_stream strm;
// more code
}
和其他类似的,
void gzip (std::vector<unsigned char>& dst,const std::vector<unsigned char>& src);
我应该怎么办?
在本地std::vector<unsigned char>
std::vector<unsigned char> tmp(src);
复制src和使用它作为源或设定指针这样,strm.next_in = const_cast<char*>(&src[0])
?
zlib是否保留输入数据?
我会建议通过迭代器接受输入:使用这种设计,它限制了调用者将数据存储在'vector中' –
zlib不接触输入数据。它被看作是“const”。 'next_in'默认不是'const',因为许多应用程序使用zlib之外的'next_in'来读取它们的数据。使它成为'const'会破坏这些应用程序。 –