我必须读取一些 8 字节块的二进制文件,然后通过 tcp 套接字发送这些块。我可以使用 C++ 迭代器来完成此任务吗?喜欢:
FileIterator file("name_file.bin");
for(iter = file.begin(); iter != file.end(); iter++) {
sendTcp(iter);
}
Run Code Online (Sandbox Code Playgroud)
类FileIterator必须返回一些将被发送的结构。在FileIterator我的构造函数中打开二进制文件并读取它。然后我创建动态数组并写入文件的内容。在每个步骤迭代器中,我必须从数组中读取下一个块并将其写入结构中并返回。
是的你可以!
您可以将 fstream 与 istream_iterator 一起使用,如下所示:
auto f = std::ifstream("lol.bin", std::ios::binary | std::ios::in);
f.exceptions(std::ios::badbit);
for (auto start = std::istream_iterator<char>{ f }, end = std::istream_iterator<char>{}; start != end; ++start)
{
...
}
Run Code Online (Sandbox Code Playgroud)
编辑: 我没有注意到你要求 8 字节块。解决它的方法是这样的:
首先定义一个运算符>>例如:
struct My8Bytes {
char bytes[8];
};
std::istream& operator>>(std::istream& s, My8Bytes& bytes) {
s.read(bytes.bytes, sizeof(bytes.bytes));
return s;
}
Run Code Online (Sandbox Code Playgroud)
并以与以前相同的方式使用迭代器,只是现在使用您的特定类型:
for (auto start = std::istream_iterator<My8Bytes>{ f }, end = std::istream_iterator<My8Bytes>{}; start != end; ++start)
{
...
}
Run Code Online (Sandbox Code Playgroud)