C ++ функция преобразования файлового потока для использования потока строк - PullRequest
5 голосов
/ 20 сентября 2011

У меня есть множество классов C ++, которые считывают данные из файлового потока.Функции выглядят так:

bool LoadFromFile(class ifstream &file);

Я создаю новую функцию для чтения из памяти вместо файла.Так что я погуглил, и istringstream, кажется, добился цели без каких-либо изменений в коде.

bool LoadFromData(class istringstream &file);

Теперь мой вопрос.Мне нужно построить этот поток для чтения из массива символов.Строка не заканчивается нулем, это чистые двоичные данные, и я получил целое число с размером.Я попытался присвоить его строке и создать поток из строки, однако строка завершается после нулевого символа ... и данные копируются.

int size;
char *data;
string s = *data;

Как создать строку из массива charуказатель без копирования данных + указание размера указателя данных?Знаете ли вы какое-либо иное решение, кроме струнного потока?

1 Ответ

4 голосов
/ 20 сентября 2011

Написать свой basic_streambuf класс! Подробнее. .(Таким образом, вы можете работать с текущей памятью.)

Чтобы создать строку из указателя и размера: string str(data,data+size); (это скопирует данные).

Более подробно: вы должны переписатьВаши функции основаны на istream:

bool LoadFromStream(istream &is);

Таким образом, вы можете сделать следующее, потому что и istringstream, и ifstream основаны на istream (позже эта функция также могла поддерживать потоки tcp...):

ifstream file;
istringstream sstream;

LoadFromStream(file);
LoadFromStream(sstream);
...