我正在添加通过网络获取数据的能力,以便只读取本地文件的代码.我正在使用的网络库以a的形式发送和接收数据vector<uint8_t>.我希望能够在读取文件后重用处理数据的代码,但该代码需要std :: istream,有没有办法让istream读取矢量数据?这是相同的数据,所以我觉得应该有办法,但我无法找到或找出如何做的代码.
当前代码:
std::ifstream stream("data.img", std::ios::in | std::ios::binary | std::ios::ate);
if (!stream.is_open())
{
throw std::invalid_argument("Could not open file.");
}
// the arg for processData is std::istream
processData(stream);
Run Code Online (Sandbox Code Playgroud)
网络框架:
vector<uint8_t> data = networkMessage.data;
// need some way to create istream from data
std::istream stream = ?
processData(stream);
stream.close();
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,还是我咆哮错误的树?
use*_*042 -1
您可以通过将数据分配给 astd::string并使用std::istringstream与其绑定来实现此目的(不考虑unsigned chartosigned char转换问题):
std::string s((char*)networkMessage.data(),networkMessage.size());
std::istringstream iss(s);
std::istream& stream = iss;
// ^ Note the reference here.
processData(stream);
stream.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |