我有一个std::vector<short>
,并希望压缩(并随后解压缩)与libzpaq从https://github.com/zpaq/zpaq/像char* buffer
。C++压缩libzpaq到char *缓冲区
但是我没有看到头文件中提到的Reader
和Writer
类的概念。我怎么把我的std::vector
得到压缩buffer
了?
目前我有类似下面的代码。
#include <vector>
#include <string>
#include <stdio.h>
#include "libzpaq.h"
struct writer: public libzpaq::Writer {
void put(int c) {
}
};
struct reader: public libzpaq::Reader {
int get() {
}
};
void libzpaq::error(const char* msg) {
fprintf(stderr, "Oops: %s\n", msg);
exit(1);
}
int main() {
short a[] = {2,5,8,2,4,2,2,2,6,5,4,3,4,2,2};
std::vector<short> v(a, a+15);
char* buffer;
reader in;
writer out;
libzpaq::compress(&in, &out, "5");
}
我wan't到矢量v
压缩为buffer
。 (后来再次解压缩。)
但我不明白Reader
和Writer
结构/类的概念。
的实况(http://mattmahoney.net/dc/libzpaq.3.html)也提到的功能为Reader
和Writer
virtual int read(char* buf, int n)
和virtual void write(const char* buf, int n)
。我怎么能投到char* buf
结束得到这个buf
的n
字节的长度?
编辑1:我发现在libzpaq.h线1376。可是事情一类StringBuffer
像
buffer = reinterpret_cast<char*> (&v[0]);
length = sizeof(short)*v.size();
libzpaq::StringBuffer inString, outString;
inString.read(buffer, length);
libzpaq::compress(&inString, &outString, "5");
std::cout << "size outstring: " << outString.size() << std::endl;
std::cout << "size instring: " << inString.size() << std::endl;
总是给我
size outstring: 0
size instring: 0
即使我尝试用一个更大的矢量v
一些thousend随机元素。