如何将streambuf复制到无符号字符数组
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_stream<_Elem,_Traits>&std::operator>>(std::basic_istream<_Elem,_Traits>&,_Elem*)':无法推导"std::basic_istrea<"的模板参数_Elem,_Traits>&;'来自"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());
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中