2

我打算再试一次,但比上次好。

我有一个程序可以从各个地方读取二进制数据,然后在我编写的类中对其进行操作。数据将从其源(可能会有所不同)最初读取,然后写入流,该流将传递给类以供类处理。

我的困难在于弄清楚如何创建iostream和写入/读取它。我在各个地方查看并阅读了cplusplus.com上的参考资料,但我找不到如何创建iostream.

根据我读过的内容,这是我尝试过的:

#include <iostream>


using namespace std;

int main(){
    streambuf* sb;
    iostream s(sb);

    s.put('h'); //segfault
}

坦率地说,我不知道它为什么会出现段错误,或者如何修复它,所以我要求有人告诉我如何正确创建一个iostream对象,最终,我将能够执行以下操作:

void printByN(iostream s, n){
    while (s.peek() != eof()){ // I'm not sure this is correct. need help with that too
        char buf [n];
        s.read(&buf, n);
        cout << buf << endl;
    }
}

int main(){
    //create iostream s;
    char* buf = "hello there my friend";
    s.write(buf, strlen(buf));
}

关键是我需要流知道它何时为空,并在该点返回一个特殊值。我不能使用 a stringstream,因为二进制数据可能包含不意味着终止数据的空字符。

如果iostream这样做是错误的方法,请让我知道更好的选择。

4

1 回答 1

6

stringstream正是你想要的。C++ 字符串可以包含嵌入的空字符 ( \0)。如果你不相信我,试试看

iostream实际上是一个抽象基类,本身并没有真正的功能。您不应该iostream直接创建实例。

于 2013-01-03T16:12:20.720 回答