如何从const unsigned char*初始化std::istringstream,无需强制转换或复制

How to initialise std::istringstream from const unsigned char* without cast or copy?

本文关键字:复制 转换 istringstream unsigned const char std 初始化      更新时间:2023-10-16

我有由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 *的函数

你的答案还是抄袭。

你考虑过这样的事情吗?

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