繁体   English   中英

如何将streambuf复制到未签名的char数组?

[英]How to copy streambuf to unsigned char array?

如何将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_istream <_Elem,_Traits>&std :: operator >>(std :: basic_istream <_Elem,_Traits> &&,_ Elem *)':无法推导'std :: basic_istream <_Elem, _Traits> &&'从'boost :: asio :: streambuf'1> D:\\ program \\ Microsoft Visual Studio 10.0 \\ VC \\ include \\ istream(987):请参见'std :: operator >>'的声明

错误C2676:二进制'>>':'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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM