【发布时间】:2015-02-23 09:28:47
【问题描述】:
我有一个std::vector<short>,想用 libzpaq 从https://github.com/zpaq/zpaq/ 压缩(然后解压缩)到类似char* buffer 的东西。
但是我没有得到头文件中提到的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");
}
我不想将向量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)。我怎样才能将std::vector<short> 转换为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。
【问题讨论】:
标签: c++ vector compression buffer