C++如何将ifstream内容(来自文件)分配给具有偏移量的字符串(istreambuf_editor)
C++ How to assign ifstream content (from file) to string with offset (istreambuf_iterator)
我尝试将二进制文件内容的一部分读取到字符串中。为什么是绳子?我需要这个作为我的消息协议(与protobuf)。
以下操作非常好:
std::string* data = new std::string();
std::ifstream ifs("C:\data.bin", std::ios::binary);
data->assign((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
但这是为了从头到尾读取文件。我只想阅读给定位置的部分。例如,从位置字节10:开始
std::string* data = new std::string();
std::ifstream ifs("C:\data.bin", std::ios::binary);
ifs.seekg((10);
data->assign((std::istreambuf_iterator<char>(ifs)), ???????);
但是如何调整末端或偏移量呢?我没有找到任何例子。我知道有一些将ifstream.read()放入缓冲区的例子。我在整个程序中使用了assign into string方法,我真的很想找到一种使用偏移量的方法。
有人能帮我吗?感谢
很抱歉,但这通常是不可能的。
该标准只定义了istreambuf_iterator
s相互比较相等的两种情况:
- 在从同一流构造两个迭代器之后,以及
- 当它们都是流迭代器的末端时
为了了解这意味着什么,请考虑标准中的示例代码实现其equal()
如下(N4659,§[isreambuf.iterator.ops]/5):
返回:
true
当且仅当两个迭代器都在流的末尾,或者两者都不在流的末端,而不管它们使用什么streambuf
对象。
因此,对于任何迭代器对,如果一个在流的末尾,另一个不在流的结尾,它们将比较不相等。对于所有其他情况(都在流的末尾,或者都不在流的末端),它们将比较相等(例如,即使它们甚至不是从同一个流派生的)。
我还不完全清楚这是要求的行为,但这显然是允许的
相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 通过指针偏移量访问结构变量值
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- librdkafka:rd_kafka_assignment 返回分配分区的偏移量 -1001
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- 向指针地址添加 20 个字节偏移量
- glMapBufferRange(..) 中的偏移量关系和 glDrawArraysInstanced(..) 中的第一
- 是否有与 C# Structs/StructLayout 等效的功能,C++中的字段偏移量?
- 我的 sumASCII 函数中的此偏移量是多少?
- boost::序列化中的派生类偏移量计算.有效吗?
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 胎面偏移量的时间复杂度?
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- ld:无效的字符串偏移量...对于".strtab"部分
- C++如何将ifstream内容(来自文件)分配给具有偏移量的字符串(istreambuf_editor)
- 从带有位偏移量的std::字符串中按字节提取连续位
- boost spirit X3解析器,该解析器将偏移量生成到原始字符串中
- 字符串迭代器+偏移量超出范围
- DLL注入替换已知偏移量C++处的字符串
- 如何从字符串中获取UTC偏移量