如何从 fstream 中准确读取 128 个字节到字符串对象中? [复制]

2024-02-21

如何从 fstream 中准确读取 128 个字节到字符串对象中?

我编写了一些代码来读取文件的前 128 个字节并打印它,然后读取文件的最后 128 个字节并打印它。最后一部分有效,因为您可以轻松迭代到 EOF,但如何从前面准确获取 128 个字节?下面的代码不起作用,因为您无法将 128 添加到 ifstream 迭代器,它不可索引,只能递增(看起来)。

当然,我可以创建一个迭代器并 *++ 128 次,但必须有一个简单的单行方法来完成它,对吗?

#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char **argv)
{
    std::ifstream ifs ("input.txt",std::ifstream::in | std::ifstream::binary);

    if (ifs.good())
    {
    // read first 128 bytes into a string
        ifs.seekg(0,std::ifstream::beg);
        std::string first128((std::istreambuf_iterator<char>(ifs)),
                             (std::istreambuf_iterator<char>(ifs))+128);

        std::cout << first128 << std::endl;

    // read last 128 bytes into a string
        ifs.seekg(-128,std::ifstream::end);
        std::string last128((std::istreambuf_iterator<char>(ifs)),
                            std::istreambuf_iterator<char>());

        std::cout << last128 << std::endl;

        return 0;
    }

    return 1;
}

char buffer[129];
ifs.read (buffer,128);
buffer[128] = '\0';
first128 = buffer;

那么这个怎么样:

template <typename Itr, typename Out>
void copy_n(Itr it, size_t count, Out out)
{
    for(size_t i=0;i<count;++i)
      out = *it++;
} 

...

std::string first128; 
std::istreambuf_iterator<char> it(ifs);
copy_n( it, 128,
  std::back_inserter<std::string>(first128) );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 fstream 中准确读取 128 个字节到字符串对象中? [复制] 的相关文章

随机推荐

  • Android 按下了数组中的哪个按钮索引

    如何设置 OnClickListener 来简单地告诉我按下了按钮数组中的哪个索引按钮 我可以使用数组更改这些按钮的文本和颜色 我这样设置它们 TButton 1 Button findViewById R id Button01 TBut
  • Xcode——查找项目中的死方法

    我很好奇是否有任何工具可以为此提供部分解决方案 由于performSelector 这是一个棘手的问题 但工具至少应该能够找出候选者 使人类的工作变得更容易 由于 Objective C 的动态特性 使用静态分析不可能检测已定义但未使用的函
  • make 未对 g++ 使用 -std=c++11 选项

    我正在尝试使用 make 编译 C 文件 但是 默认情况下它不使用 std c 11 标志 每当我需要编译使用 c 11 特定功能的程序时 我都必须使用 g 显式编译它 所以 我想问如何让我的系统上的所有 c 文件自动使用选项 std c
  • 在 Angular 2 中激活路由*之前*解析值

    只要承诺尚未解决 我就想阻止访问路线 另外 我想将该承诺的返回值传递给路由组件 Several https stackoverflow com questions 36260780 angular 2 resolve root compon
  • PHP ssh2_exec 通道退出状态?

    好的 所以 pecl ssh2 应该是 libssh2 的包装器 libssh2 具有 libssh2 channel get exit status 有什么方法可以获取这些信息吗 I NEED STDOUT STDERR 退出状态 我得到
  • 对于 Rails,如何访问或打印配置变量(作为实验或测试/调试)

    例如 在config environments production rb在 Rails 3 应用程序中 有 config serve static assets false 和许多变数 如何将它们作为一个整体全部打印出来 也许在一个对象中
  • 空单元格的数据表默认渲染函数

    我想为我拥有的所有数据表中的所有空单元格定义默认值 但我不想为每一列都这样做 example dataTable ajaxSource sources deep txt columns data engine render function
  • 如何将嵌套的Python字典转换为对象?

    我正在寻找一种优雅的方法来使用带有一些嵌套字典和列表 即javascript样式对象语法 的字典上的属性访问来获取数据 例如 gt gt gt d a 1 b c 2 d hi foo bar 应该可以通过这种方式访问 gt gt gt x
  • appSettings 配置部分中不存在键“UserID”

    突然 当我尝试在设计器中的 Window Forms 应用程序中打开 10 多个表单中的 2 个时 开始出现此错误 为了防止在加载设计器之前可能发生的数据丢失 必须解决以下错误 appSettings 配置部分中不存在键 UserID 它曾
  • 在 Android 手机上录音电话吗?

    我尝试过并使用以下代码来记录拨出电话 但它没有 Override public void onReceive Context context Intent intent this context context if intent getA
  • Laravel 迁移中的时间格式?

    我想要一个输入 您可以在其中输入 EU 格式的时间 例如 12 00 或 21 34 时 分 我怎么做 Schema create posts function Blueprint table table gt increments id
  • 使用 CSS3rotateY 的卡片翻转效果,但具有多个面取决于按钮按下?

    所以我需要创建一个几乎完全相同的翻转图像this http desandro github com 3dtransforms examples card 01 html 但不同之处在于 如果我想要多个按钮并且每个按钮都翻转到特定的面 情况会
  • 安装 ReSharper 后 Visual Studio 2005 Intellisense 停止工作

    我安装了 ReSharper 评估版并将其卸载 之后 Visual Studio 的 Intellisense 停止工作 我已经重新启动了计算机 但仍然存在此问题 有人可以帮我吗 我正在使用 Visual Studio 2005 谢谢 尝试
  • 通过调用.ashx页面下载文件

    我正在从母版页客户端脚本 Jquery 请求 ashx 页面 该脚本具有下载 PDF 文件的代码 当我调试它时 我可以看到 文件下载 代码的执行 但文件没有下载 ajax type POST url FileDownload ashx da
  • 使用 Kerberos 的 SSO

    我正在尝试使用 Kerberos 和 Python Flask kerberos 模块进行身份验证 基本上这是我的代码 DEBUG True app Flask name app config from object name os env
  • g++ 既是 C++ 编译器又是链接器吗?

    我正在查看 Eclipse 中构建的输出 我正在针对 ColdFire 处理器进行交叉编译 编译行如下所示 m68k elf g O2 falign functions 4 IC nburn include IC nburn MOD52 接
  • 更新标准表中的字段 LIPS-LFIMG 时出现问题

    所有的流程看起来都不错 但是当通过调用函数时 更新也失败 需要更新的字段没有更新 不知道问题出在哪里 有人可以帮我解决这个问题吗 我错过了什么步骤吗 错误消息登录 LT PROT DATA LT PROT LIKE PROTT OCCURS
  • C# 在不下载整个文件的情况下获取网络上图像的宽度/高度?

    我相信 JPG 会存储宽度和高度信息在前几个字节内 http en wikipedia org wiki JPEG Syntax and structure 在给定绝对 URI 的情况下获取此信息的最简单方法是什么 首先 您可以使用以下命令
  • 将图像上传到 Google 云端硬盘后清除表单字段

    几天来我一直在努力确保在向谷歌驱动器提交 jpg 后 它会清理表单字段并为下一次插入下一条记录做好准备 它复制文件但不重置该字段 我想要的是 一旦他上传文件 他就会重置表单字段 而无需重新加载它等待下一个上传 这个例子是我从互联网上获取的
  • 如何从 fstream 中准确读取 128 个字节到字符串对象中? [复制]

    这个问题在这里已经有答案了 如何从 fstream 中准确读取 128 个字节到字符串对象中 我编写了一些代码来读取文件的前 128 个字节并打印它 然后读取文件的最后 128 个字节并打印它 最后一部分有效 因为您可以轻松迭代到 EOF