Как инициализировать std::istringstream из const unsigned char* без приведения или копирования?

У меня есть двоичные данные в байтовой последовательности, описанной const unsigned char *p а также size_t len, Я хочу быть в состоянии передать эти данные в функцию, которая ожидает std::istream *,

Я думаю, что я смогу сделать это без копирования данных, небезопасных приведений или написания нового потокового класса. Но пока я терплю неудачу. Кто-нибудь может помочь?

Обновить

Спасибо всем за комментарии. Казалось бы, это вопрос без ответа, потому что std::istream работает с char и преобразование в какой-то момент потребует по крайней мере целое приведение из unsigned char,

Прагматичный подход заключается в следующем:

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

и передать &i к функции, ожидающей std::istream *,

1 ответ

Решение

Ваш ответ все еще копируется.

Вы рассматривали что-то подобное?

const unsigned char *p;
size_t len;

std::istringstream str;
str.rdbuf()->pubsetbuf(
    reinterpret_cast<char*>(const_cast<unsigned char*>(p)), len);
Другие вопросы по тегам