我有一個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隨機元素。