gpt4 book ai didi

c++ - 读取二进制文件的迭代器

转载 作者:行者123 更新时间:2023-11-30 02:33:25 26 4
gpt4 key购买 nike

我必须以 8 字节为单位读取一些二进制文件,然后通过 tcp 套接字发送这些 block 。我可以使用 C++ 迭代器来完成这项任务吗?喜欢:

 FileIterator file("name_file.bin");

for(iter = file.begin(); iter != file.end(); iter++) {
sendTcp(iter);
}

FileIterator 必须返回一些将被发送的结构。在 FileIterator 的构造函数中,我打开二进制文件并读取它。然后我创建动态数组并在其中写入文件的内容。在每一步迭代器中,我必须从数组中读取下一个 block 并将其写入结构并返回。

最佳答案

是的,你可以!

您可以将 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)
{
...
}

编辑:我没有注意到你要求 8 字节 block 。解决方法如下:

首先定义一个运算符>>例如:

struct My8Bytes {
char bytes[8];
};

std::istream& operator>>(std::istream& s, My8Bytes& bytes) {
s.read(bytes.bytes, sizeof(bytes.bytes));
return s;
}

然后像以前一样使用迭代器,只是现在使用您的特定类型:

for (auto start = std::istream_iterator<My8Bytes>{ f }, end = std::istream_iterator<My8Bytes>{}; start != end; ++start)
{
...
}

关于c++ - 读取二进制文件的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35466623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com