C++;将文件流函数转换为使用stringstream < >我有大量的C++类,它们从文件流读取数据。函数如下所示 bool LoadFromFile(class ifstream &file);

C++;将文件流函数转换为使用stringstream < >我有大量的C++类,它们从文件流读取数据。函数如下所示 bool LoadFromFile(class ifstream &file);,c++,ifstream,stringstream,C++,Ifstream,Stringstream,我正在创建一个新函数来从内存而不是文件中读取。所以我在谷歌上搜索了一下,一个istringstream似乎在不修改代码的情况下完成了这个任务 bool LoadFromData(class istringstream &file); 现在我的问题是。我需要构造这个流以从char数组中读取。字符串不是以null结尾的,它是纯二进制数据,我得到了一个大小为的整数。我尝试将其分配给一个字符串并从字符串创建一个流,但是字符串在一个空字符后终止。。然后复制数据 int size; char *d

我正在创建一个新函数来从内存而不是文件中读取。所以我在谷歌上搜索了一下,一个istringstream似乎在不修改代码的情况下完成了这个任务

bool LoadFromData(class istringstream &file);
现在我的问题是。我需要构造这个流以从char数组中读取。字符串不是以null结尾的,它是纯二进制数据,我得到了一个大小为的整数。我尝试将其分配给一个字符串并从字符串创建一个流,但是字符串在一个空字符后终止。。然后复制数据

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

如何从char数组指针创建字符串而不复制数据并指定指针数据的大小?除了stringstream,您还知道其他解决方案吗?

编写自己的
basic\u streambuf
class。(这样您就可以使用当前内存。)

从指针和大小创建字符串:
stringstr(数据,数据+大小)(它将复制数据)

还有一点:您应该将函数重写为基于
istream

bool LoadFromStream(istream &is);
通过这种方式,您可以执行以下操作,因为
istringstream
ifstream
都基于
istream
(稍后此函数还可以支持tcp流…):


那么,澄清一下:您的问题是您的
char*
不是以null结尾的,因此您在用它构造
std::string
时遇到了问题吗?是的,这基本上就是问题所在。我还想知道是否有人知道一个更好的解决方案。以下是可能的解决方案:(一个版本使用boost,复制数据,另一个只使用gcc)非常感谢!这解决了我的问题,根本没有改变功能!似乎它适用于文件流,但当我向它传递字符串流时,我得到了这个编译器错误(与上面的代码完全相同)。我尽了最大努力去研究它,但我就是不明白。它是在VS中编译的。无法将参数1从'class std::basic_istringstream'转换为'class istream&'我在许多地方使用它。您应该定义为
bool LoadFromStream(istream&is)针对
bool LoadFromStream(类为流和is)使用名称空间stdbool LoadFromStream(std::istream&is)。您应该包括
ifstream file;
istringstream sstream;

LoadFromStream(file);
LoadFromStream(sstream);