如何将streambuf复制到unsigned char数组?

时间:2015-02-21 22:55:58

标签: c++ boost streambuf

如何将streambuf中的数据复制到unsigned char数组? 下面的代码有编译器错误:

boost::asio::streambuf buf;
std::ostream os(&buf);
boost::archive::binary_oarchive oa(os);
oa << m_data;

// allocate space for the buffer
unsigned char* output = (unsigned char*)malloc(buf.size());
buf >> output;

编译器错误是(在最后一行):

错误C2784:&#39; std :: basic_istream&lt; _Elem,_Traits&gt; &amp; std :: operator&gt;&gt;(std :: basic_istream&lt; _Elem,_Traits&gt;&amp;&amp;,_ Elem *)&#39; :无法推断&#39; std :: basic_istream&lt; _Elem,_Traits&gt;的模板参数&安培;&安培;&#39;来自&#39; boost :: asio :: streambuf&#39; 1 GT; D:\ program \ Microsoft Visual Studio 10.0 \ VC \ include \ istream(987):参见&#39; std :: operator&gt;&gt;&#39;

的声明

错误C2676:二进制&#39;&gt;&gt;&#39; :&#39; boost :: asio :: streambuf&#39;没有定义此运算符或转换为预定义运算符可接受的类型

2 个答案:

答案 0 :(得分:1)

有一种方法可以在不使用原始memcpy的情况下执行此操作。有指向内存区域开头的指针,你可以做

buf.sgetn(reinterpret_cast<char *>(output), buf.size());

这将复制前n个字节(在这种情况下为buf.size()),但也会从缓冲区中删除它们,留下未复制的字节。当你的缓冲区是例如类成员并且你想重用它时,它可能会很有用。

答案 1 :(得分:0)

缓冲区分配后,您可以使用memcpy填充它:

unsigned char* output = (unsigned char*)malloc(buf.size());
memcpy(output, boost::asio::buffer_cast<const void*>(buf.data()), buf.size());