使用zlib处理std::string和stringstream

3
我正在客户端使用zlib对字符串进行压缩,并在服务器端进行解压。
我找到了一个链接,使用char缓冲区完美实现了这一点: https://gist.github.com/arq5x/5315739 有没有人可以提供使用zlib方法的简单示例,用于处理std::stringstd::stringstream
编辑:请不要使用Boost,因为我正在开发受限制的API。

1
你可以使用data()c_str()std::string获取char缓冲区,也可以使用str()std::stringstream获取std::string。反过来,你可以使用char缓冲区构造一个std::string,并使用std::string构造一个std::stringstream - Chris Drew
我知道。刚从zlib头文件中发现没有直接处理字符串或字符串流的方法。 - V Shreyas
2个回答

2

我从zlib.h的文档和随下载的zlib一起提供的examples.c中发现,你只能使用文件或char缓冲区进行压缩。因此,将字符串或字符串流转换为char缓冲区。

以下是代码:https://panthema.net/2007/0328-ZLibString.html


1

我在网上找到了一个非常有用的例子,对我很有帮助:

blog: 使用ZLib压缩模拟数据

基本上,使用gzwrite和gzread进行写入和读取,就像写普通文件一样。在写入时,首先写入字符串大小,然后写入字符串。读取时同样按照相同的顺序。在读取时,首先读入一个std::string对象,然后可以将字符串对象转换为istringstream:

std::istringstream in(data);  // data is std::string type, using the same notation as in the blog

对于编写代码而言,将 ostringstream 对象转换为 std::string 对象以作为函数参数可能更加灵活。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接