将文件从 Boost filtering_streambuf解压缩到 std::vector<unsigned char>?
Decompress file from Boost filtering_streambuf to std::vector<unsigned char>?
我正在编写一个执行SSL 3.1加密解密数据交换的程序。我收到的数据也以 gzip 格式压缩。我能够解密这些数据并将其打印到我的控制台,使用以下代码
:void decompress(unsigned char * arr, int nCopySize, std::vector <unsigned char>& vecArg)
{
using namespace boost::iostreams;
using namespace boost::interprocess;
std::string str1(reinterpret_cast<const char *>(arr), nCopySize);
auto sizeT = str1.size();
stringstream file2(str1, ios_base::in | ios_base::binary);
filtering_streambuf<input> iin;
iin.push(gzip_decompressor());
iin.push(file2);
boost::iostreams::copy(iin, cout);
此处停止工作(解压缩的代码已成功在控制台中打印)
boost::interprocess::basic_vectorstream<std::vector<char>> vectorStream;
boost::iostreams::copy(iin, vectorStream); // this produces compile time error
std::vector<unsigned char> chars(
vectorStream.vector().begin(),
vectorStream.vector().end()
);
}
我正在尝试将解压缩的代码存储到无符号的字符向量中,但是在使用此处找到的最后一段代码时:将文件从 Boost filtering_streambuf解压缩到 std::vector
Error 5 error C2243: 'type cast' : conversion from 'boost::interprocess::basic_vectorstream<std::vector<char,std::allocator<char>>,std::char_traits<char>> *' to 'volatile const std::basic_streambuf<char,std::char_traits<char>> *' exists, but is inaccessible c:boost_1_59_0boostiostreamstraits.hpp 57 1 TeraLauncher
我已经进行了其他尝试,使用 char 数组或字符串,设法编译但遇到了运行时崩溃。理想情况下,我希望它与我编写的代码(std::vector)一起使用。谢谢
Live On Coliru
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/device/array.hpp>
#include <iostream>
#include <vector>
#include <iterator>
namespace bio = boost::iostreams;
void decompress(unsigned char const* arr, std::size_t nCopySize, std::vector <unsigned char>& vecArg) {
bio::array_source arrs{ reinterpret_cast<char const*>(arr), nCopySize };
bio::filtering_istreambuf iin;
iin.push(bio::gzip_decompressor{});
iin.push(arrs);
vecArg.assign(std::istreambuf_iterator<char>{&iin}, {});
}
int main() {
/*
* If you really want to hear about it, the first thing you'll probably want to know is
* where I was born, an what my lousy childhood was like, and how my parents were
* occupied and all before they had me, and all that David Copperfield kind of crap, but I
* don't feel like going into it, if you want to know the truth. In the first place, that stuff
* bores me, and in the second place, my parents would have about two hemorrhages apiece
* if I told anything pretty personal about them. They're quite touchy about anything like
* that, especially my father.
*/
unsigned char sample[] = {
0x1f, 0x8b, 0x08, 0x00, 0x8a, 0x47, 0xd7, 0x56, 0x00, 0x03, 0x55, 0x52, 0x4b, 0x76, 0xc3, 0x20, 0x10, 0xdb, 0xfb, 0x14, 0xda, 0x65, 0xe3, 0x97,
0x4b, 0xb4, 0x1b, 0xef, 0x7b, 0x81, 0x31, 0x0c, 0x81, 0x17, 0xc2, 0x50, 0x3e, 0xf5, 0xf3, 0xed, 0x3b, 0xd8, 0x69, 0x5e, 0xba, 0x84, 0x91, 0x34,
0x92, 0x60, 0x71, 0xd8, 0xa5, 0xa3, 0x30, 0xc5, 0xb8, 0x63, 0xa3, 0xd4, 0xd0, 0x04, 0x9e, 0xa9, 0x80, 0x56, 0xe9, 0x0d, 0xa1, 0xcd, 0x68, 0x9e,
0xe1, 0x42, 0xa9, 0x3a, 0xf3, 0x21, 0xdd, 0x06, 0xe3, 0x12, 0x23, 0x72, 0x91, 0x95, 0xd6, 0x37, 0xda, 0x3d, 0xc9, 0x86, 0x50, 0xa7, 0xcd, 0x73,
0x61, 0x2c, 0x7a, 0x5f, 0xb1, 0x4a, 0x49, 0x33, 0x28, 0x61, 0xf3, 0xd4, 0xf0, 0xd8, 0x11, 0xa5, 0xd7, 0x1d, 0xc6, 0x87, 0x68, 0xbd, 0x88, 0x3d,
0x40, 0x31, 0xdc, 0x79, 0x80, 0x2c, 0xbc, 0x2a, 0x28, 0x28, 0x53, 0xe1, 0xd4, 0x2a, 0x36, 0x15, 0x9a, 0xc4, 0x98, 0x9e, 0x03, 0xdb, 0x03, 0xa0,
0x3e, 0xb1, 0xb2, 0x13, 0x5d, 0xa0, 0xb6, 0x76, 0x78, 0xb2, 0x78, 0x3c, 0xc9, 0x63, 0xd6, 0xc6, 0x9a, 0x4f, 0xfa, 0x09, 0x16, 0x1f, 0x92, 0x33,
0x17, 0x17, 0x38, 0x5a, 0xdc, 0x83, 0xce, 0xc5, 0xc1, 0x14, 0xca, 0x33, 0x56, 0x0d, 0xb6, 0x4c, 0x56, 0xd2, 0xa5, 0xc1, 0x31, 0xc7, 0xc3, 0x00,
0x6e, 0x32, 0xc2, 0x85, 0xa4, 0x49, 0x46, 0xea, 0x70, 0x56, 0xf3, 0x2f, 0xdc, 0x68, 0xa2, 0x95, 0xde, 0xfc, 0x15, 0x4b, 0x7a, 0xeb, 0x25, 0x47,
0x32, 0x3c, 0x9f, 0xcb, 0x6b, 0xeb, 0xce, 0x4d, 0x9a, 0x9b, 0xeb, 0xcb, 0x59, 0x38, 0xc1, 0x95, 0x8d, 0xe8, 0xe9, 0x89, 0x7e, 0xcf, 0x29, 0x5d,
0x4d, 0x7a, 0xfa, 0xe1, 0x67, 0xed, 0x6d, 0x1b, 0xaf, 0xf0, 0x90, 0x52, 0x3c, 0xdd, 0x54, 0x88, 0xb4, 0x00, 0xc3, 0x93, 0x7a, 0x5a, 0xd4, 0x4c,
0x1c, 0x5d, 0xec, 0xe7, 0x63, 0xe4, 0xc2, 0xad, 0xa9, 0x12, 0x97, 0x2a, 0x89, 0xe2, 0x1f, 0x5f, 0xc9, 0x57, 0x7c, 0x69, 0x43, 0x17, 0x6d, 0xea,
0xbb, 0x87, 0xa6, 0xc6, 0xa5, 0x1b, 0xbf, 0x3f, 0x01, 0x2f, 0xfe, 0x88, 0x3e, 0x0d, 0xe3, 0x33, 0xb8, 0x66, 0x36, 0xe1, 0xf8, 0x09, 0xea, 0xcd,
0x91, 0x8a, 0x94, 0xeb, 0xf4, 0x0b, 0xb2, 0xb3, 0x9b, 0x5a, 0x23, 0x02, 0x00, 0x00 };
std::vector<unsigned char> d;
decompress(sample, sizeof(sample), d);
std::cout.write(reinterpret_cast<char const*>(&*d.begin()), d.size());
}
指纹
If you really want to hear about it, the first thing you'll probably want to know is
where I was born, an what my lousy childhood was like, and how my parents were
occupied and all before they had me, and all that David Copperfield kind of crap, but I
don't feel like going into it, if you want to know the truth. In the first place, that stuff
bores me, and in the second place, my parents would have about two hemorrhages apiece
if I told anything pretty personal about them. They're quite touchy about anything like
that, especially my father.
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::vector的包装器,使数组的结构看起来像结构的数组
- 呼叫运营商<<临时
- 为什么(-1)%vector::size()总是返回0
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- std::vector::reserve(未知m),我知道m<<;N(通常)并且知道N
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- C++重载<<具有typedef'd std::vector
- std::映射<>或std::vector<>在处理大型标志集时