Как инициализировать std :: istringstream из const unsigned char * без приведения или копирования? - PullRequest
3 голосов
/ 19 июля 2011

У меня есть двоичные данные в байтовой последовательности, описанной 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 Ответ

1 голос
/ 12 октября 2011

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

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

const unsigned char *p;
size_t len;

std::istringstream str;
str.rdbuf()->pubsetbuf(
    reinterpret_cast<char*>(const_cast<unsigned char*>(p)), len);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...