【发布时间】:2015-02-06 10:46:03
【问题描述】:
我需要压缩一个大字节数组,我已经在应用程序中使用 Crypto++ 库,所以在同一个库中包含压缩/解压缩部分会很棒。
这个小测试按预期工作:
///
string test = "bleachbleachtestingbiatchbleach123123bleachbleachtestingb.....more";
string compress(string input)
{
string result ("");
CryptoPP::StringSource(input, true, new CryptoPP::Gzip(new CryptoPP::StringSink(result), 1));
return result;
}
string decompress(string _input)
{
string _result ("");
CryptoPP::StringSource(_input, true, new CryptoPP::Gunzip(new CryptoPP::StringSink(_result), 1));
return _result;
}
void main()
{
string compressed = compress(test);
string decompressed = decompress(compressed);
cout << "orginal size :" << test.length() << endl;
cout << "compressed size :" << compressed.length() << endl;
cout << "decompressed size :" << decompressed.length() << endl;
system("PAUSE");
}
我需要压缩这样的东西:
unsigned char long_array[194506]
{
0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x00,0x04,0x02,0x00,0x04,
0x04,0x00,0x02,0x00,0x01,0x04,0x02,0x00,0x04,
0x01,0x00,0x02,0x02,0x00,0x04,0x02,0x00,0x00,
0x03,0x00,0x02,0x00,0x00,0x04,0x01,0x00,0x04,
....
};
我尝试将 long_array 用作 const char * 并用作 byte 然后将其提供给 compress 函数,它似乎已被压缩,但解压缩后的大小为 4,并且显然不完整。也许它太长了。 我如何重写那些压缩/解压缩函数以使用该字节数组? 谢谢你们。 :)
【问题讨论】:
-
也许
compress()会在它看到的第一个 NULL 字节处停止,因为它不需要参数来明确指定要压缩的数据的长度。如果是这种情况,您可能需要使用不同的函数来压缩任意二进制数据。不过,我对 Crypto++ 并不太熟悉…… -
是的,它在第一个空字节后停止。我无法找到文档/剪辑以使用字节数组。
-
Crypto++ wiki 现在有一个 Gzip 页面,包括一个允许您读取和写入修改文件时间、原始文件名和 cmets 的补丁。请参阅Gzip wiki 页面。
标签: c++ arrays visual-c++ gzip crypto++