如何将streambuf复制到无符号字符数组

How to copy streambuf to unsigned char array?

本文关键字:无符号 字符 数组 复制 streambuf      更新时间:2023-10-16

如何将streambuf中的数据复制到无符号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:"std::basic_stream&lt_Elem,_Traits>&std::operator>>(std::basic_istream<_Elem,_Traits>&,_Elem*)':无法推导"std::basic_istrea<"的模板参数_Elem,_Traits>&amp;'来自"boost::asio::streambuf"1> D:\program\Microsoft Visual Studio 10.0\VC\include\istream(987):请参见"std::operator>>"的声明

错误C2676:binary">>":"boost::asio::streambuf"未定义此运算符或转换为预定义运算符可接受的类型

有一种方法可以在不使用原始memcpy的情况下做到这一点。有了指向内存区域开头的指针,就可以进行

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

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

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

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