如何在没有强制转换或复制的情况下从const unsigned char *初始化std :: istringstream?

时间:2011-07-19 13:55:24

标签: c++ strstream

我有const unsigned char *psize_t len描述的字节序列中的二进制数据。我希望能够将此数据传递给期望std::istream *

的函数

我认为我应该能够在不复制数据,不安全的强制转换或编写新的流类的情况下执行此操作。但到目前为止,我失败了。有人可以帮忙吗?

更新

感谢大家的评论。这似乎是一个无法回答的问题,因为std::istreamchar一起运作,转换在某些时候至少需要unsigned char的整数投射。

务实的做法是这样做:

std::string s(reinterpret_cast<const char*>(p), len);
std::istringstream i(s);

并将&i传递给期待std::istream *的函数。

1 个答案:

答案 0 :(得分:1)

你的答案仍在复制。

你考虑过这样的事吗?

const unsigned char *p;
size_t len;

std::istringstream str;
str.rdbuf()->pubsetbuf(
    reinterpret_cast<char*>(const_cast<unsigned char*>(p)), len);