【c++】istream 转为 string

一直局限于使用cout、cin,在平时的开发中已经足够了。突然遇到istream,还真不知所措,在使用boost中,各种stream流被虐,今天一个需求就是把istream转为string,如下:

std::shared_ptr<boost::asio::streambuf> read_buffer(new boost::asio::streambuf);
......//字符串
std::istream stream(read_buffer.get());
std::istreambuf_iterator<char> eos;
std::string str(std::istreambuf_iterator<char>(stream), eos);

参考文章:http://stackoverflow.com/questions/3203452/how-to-read-entire-stream-into-a-stdstring

### C++ 中 `istream` 库的用法 #### 使用 `istream` 进行输入操作 在 C++ 中,`istream` 是标准库的一部分,主要用于处理字符流的输入。最常用的对象是 `cin`,它代表控制台的标准输入。 可以使用运算符 `>>` 来读取数据到变量中: ```cpp #include <iostream> using namespace std; int main() { int number; cout << "Enter a number: "; cin >> number; // 使用 istream 对象 cin 读取整数 cout << "You entered: " << number << endl; } ``` 除了基本的数据类型外,还可以通过重载 `operator>>` 支持自定义类型的输入[^1]。 对于文件输入,可以通过创建 `ifstream` 类的对象来实现: ```cpp #include <fstream> // 包含用于文件 I/O 的头文件 using namespace std; void readFile(const char* filename) { ifstream infile(filename); if (!infile.is_open()) { cerr << "Failed to open file." << endl; return; } double value; while (infile >> value) { // 循环直到遇到文件结束标志 EOF 或者发生错误 cout << value << ' '; } infile.close(); } ``` 当涉及到更复杂的结构化数据时,如 Protocol Buffers 提供的功能,则可利用其内置方法解析来自任意 `istream` 流的内容: ```cpp // 假设已经有一个名为 MyMessage 的 protobuf message 定义好了. MyMessage msg; { ifstream input_file("data.bin", ios::in | ios::binary); if (!msg.ParseFromIstream(&input_file)) { cerr << "Failed to parse data from file." << endl; return false; } } // 处理已加载的消息... ``` 此代码片段展示了如何从二进制文件中反序列化一个 Protobuf 消息实例[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值