Как инициализировать 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);