0

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

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_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &&,_Elem *)' : 无法推断 'std::basic_istream<_Elem, _Traits> &&' from 'boost::asio::streambuf' 1> D:\program\Microsoft Visual Studio 10.0\VC\include\istream(987) : 见 'std::operator >>' 的声明

错误 C2676:二进制“>>”:“boost::asio::streambuf”未定义此运算符或转换为预定义运算符可接受的类型

4

2 回答 2

1

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

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

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

于 2018-05-19T22:42:58.593 回答
0

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

unsigned char* output = (unsigned char*)malloc(buf.size());
memcpy(output, boost::asio::buffer_cast<const void*>(buf.data()), buf.size());
于 2015-02-22T18:15:55.083 回答