如何将 streambuf 复制到 unsigned char 数组?
How to copy streambuf to unsigned char array?
如何将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:'std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &&,_Elem *)':无法从 'boost::asio::streambuf' 中推断出 'std::basic_istream<_Elem,_Traits> &&' 的模板参数
1> D:\program\Microsoft Visual Studio 10.0\VC\include\istream(987) : 见 'std::operator >>'
的声明
error C2676: 二进制“>>”: 'boost::asio::streambuf' 未定义此运算符或转换为预定义运算符可接受的类型
缓冲区分配后,可以使用memcpy填充它:
unsigned char* output = (unsigned char*)malloc(buf.size());
memcpy(output, boost::asio::buffer_cast<const void*>(buf.data()), buf.size());
有一种方法可以在不使用原始 memcpy 的情况下执行此操作。有了指向内存区域开始的指针,你可以做
buf.sgetn(reinterpret_cast<char *>(output), buf.size());
这将复制前 n 个字节(在本例中为 buf.size()
),但也会从缓冲区中删除它们,留下未复制的字节。例如,当您的缓冲区是 class 成员并且您想重用它时可能会有用。
如何将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:'std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &&,_Elem *)':无法从 'boost::asio::streambuf' 中推断出 'std::basic_istream<_Elem,_Traits> &&' 的模板参数 1> D:\program\Microsoft Visual Studio 10.0\VC\include\istream(987) : 见 'std::operator >>'
的声明error C2676: 二进制“>>”: 'boost::asio::streambuf' 未定义此运算符或转换为预定义运算符可接受的类型
缓冲区分配后,可以使用memcpy填充它:
unsigned char* output = (unsigned char*)malloc(buf.size());
memcpy(output, boost::asio::buffer_cast<const void*>(buf.data()), buf.size());
有一种方法可以在不使用原始 memcpy 的情况下执行此操作。有了指向内存区域开始的指针,你可以做
buf.sgetn(reinterpret_cast<char *>(output), buf.size());
这将复制前 n 个字节(在本例中为 buf.size()
),但也会从缓冲区中删除它们,留下未复制的字节。例如,当您的缓冲区是 class 成员并且您想重用它时可能会有用。