C++:将读取的二进制文件存储到缓冲区中

2024-02-10

我正在尝试读取二进制文件并将其存储在缓冲区中。问题是,在二进制文件中有多个以空结尾的字符,但它们不在末尾,而是在其他二进制文本之前,因此如果我将文本存储在“\0”之后,它只会将其删除缓冲。

Example:

char * a = "this is a\0 test";
cout << a;

这只会输出:this is a

这是我的真实代码:

该函数读取一个字符

bool CStream::Read  (int * _OutChar)
{
    if (!bInitialized)
        return false;

    int iReturn = 0;

     *_OutChar = fgetc (pFile);

    if (*_OutChar == EOF)
        return false;

    return true;
}

这就是我使用它的方式:

    char * SendData = new char[4096 + 1];

    for (i = 0; i < 4096; i++)
    {
        if (Stream.Read (&iChar))
            SendData[i] = iChar;
        else
            break;
    }

我只想提一下,有一种标准方法可以从二进制文件读取到缓冲区。

Using <cstdio>:

char buffer[BUFFERSIZE];

FILE * filp = fopen("filename.bin", "rb"); 
int bytes_read = fread(buffer, sizeof(char), BUFFERSIZE, filp);

Using <fstream>:

std::ifstream fin("filename.bin", ios::in | ios::binary );
fin.read(buffer, BUFFERSIZE);

当然,之后如何处理缓冲区完全取决于您。

编辑:完整示例使用<cstdio>

#include <cstdio>

const int BUFFERSIZE = 4096;    

int main() {
    const char * fname = "filename.bin";
    FILE* filp = fopen(fname, "rb" );
    if (!filp) { printf("Error: could not open file %s\n", fname); return -1; }

    char * buffer = new char[BUFFERSIZE];
    while ( (int bytes = fread(buffer, sizeof(char), BUFFERSIZE, filp)) > 0 ) {
        // Do something with the bytes, first elements of buffer.
        // For example, reversing the data and forget about it afterwards!
        for (char *beg = buffer, *end=buffer + bytes; beg < end; beg++, end-- ) {
           swap(*beg, *end);
        }
    }

    // Done and close.
    fclose(filp);

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

C++:将读取的二进制文件存储到缓冲区中 的相关文章

随机推荐

  • MySQL Group By 自定义时间戳

    我想从按日期分组的数据库中获取结果 生成的元组应按日期分组 日期范围为上午 5 点到凌晨 5 点 换句话说 截止时间应该是凌晨 5 点 而不是午夜 12 点 我可以GROUP BY DAY timestamp 按正常日期分组 但如果我必须改
  • Pandas 从日期类型列获取星期几

    我正在使用 Python 3 6 和 Pandas 0 20 3 我有一列已从日期时间转换为日期类型 我所需要的只是日期 为了便于使用 我将其作为派生列 但我希望通过一周中的某一天的计算来进行一些进一步的操作 我可以从日期时间类型获取星期几
  • 更改 MKOverlayView 的 MKOverlay 坐标

    我在地图上有一个叠加层 我想更改其坐标 为了无缝地做到这一点 我将调用设置需要显示地图矩形 http developer apple com library ios documentation MapKit Reference MKOver
  • 如何增加BottomNavigationView的宽度以填充屏幕

    如何增加 BottomNavigationView 菜单的宽度 以下是当前场景 我无法增加整个屏幕的宽度 Menu xml
  • MySQL 日期时间 <-> Java 日期

    我使用 Hibernate 并且 MySQL 数据库中有一个日期时间 现在我想将 java util Date 的日期 时间存储到数据库中 所以我可以写 SimpleDateFormat df new SimpleDateFormat yy
  • 如何将 ArangoDB 嵌入桌面应用程序

    我想在我的应用程序中嵌入一个图形数据库 适用于 Windows Linux 和 MAC 我将搜索范围缩小到 ArangoDB 和 OrientDB 我能够让嵌入式 OrientDB 工作 但我仍然想尝试 ArangoDB 来做出明智的决定
  • 元组结构构造函数抱怨私有字段

    我正在开发一个基本的 shell 解释器来熟悉 Rust 在处理 shell 中存储挂起作业的表时 我遇到了以下编译器错误消息 error cannot invoke tuple struct constructor with privat
  • 请确认:Windows Workflow Foundation 现在是一匹值得支持的好马吗?

    我们正在为一家端到端使用 Microsoft 产品的公司选择工作流程解决方案 鉴于 WF4 的消息 它似乎本质上是对以前版本的重写 支持当前版本是明智之举还是我们应该寻找其他地方 即 当前版本是否太糟糕以至于我们不明智地尝试使用它 Haii
  • TensorFlow 和 Numpy 之间的不同结果

    我有以下代码片段 许多西格玛矩阵是由神经网络生成的 并且这些矩阵必须是正定的 所以这是在调试功能中检查的 奇怪的是 Sigma2 没有给出 LinAlgError Matrix is not Positive Defined Error 而
  • JavaScript 用回调替换 - 性能问题

    在 JavaScript 中 您可以在正则表达式字符串替换操作中定义回调处理程序 str replace str 123 etc replaceCallback 假设您有一个字符串和替换的查找对象 var lookup str1 repl1
  • 永远等待 启动

    我无法再在模拟器或 iPhone 上运行我的程序 它编译得很好 没有任何问题 但后来我收到消息 等待启动 它永远发生 这种情况只发生在一个项目中 我终于通过使用 xproj 文件的备份解决了这个问题 问题出在 xproj 文件中 不过 我不
  • Linux 上的 pthread 执行

    我开始在 Linux 上进行 pthread 编程 在第一个程序中我完全感到困惑 下面是我正在运行的程序 include
  • 单击 JButton 时如何删除 JTable 中的当前行?

    我有很多行JTable每行都有删除按钮 我想在单击该行的删除按钮时删除当前行 我怎样才能做到这一点 private JButton button public MyTableButtonEditor1 button new JButton
  • MySQL:使用另一个表中的值作为列别名?

    我们有一张非常时髦的表格 我试图从中得到一个描述性的结果集 该表存储紧密相关但不同的数据类型集合 并且有意义的列 名称 存储在单独的表中 我认为展示比解释更容易 一个简化和抽象的例子 CREATE TABLE IF NOT EXISTS s
  • Xrm 在 Dynamics CRM 2011 中未定义

    当我创建 js 代码时 我似乎无法让 Xrm 变量工作 是否有我需要包含的库或我需要先运行的函数 我是否需要确保正确引用 ClientGlobalContext js aspx 我处于 C 心态 只是想知道是否有任何类型的 include
  • 创建自定义累积总和,计算给定位置列表及其顺序的下游数量

    我试图想出一些代码 基本上可以计算其下方位置的累积值 采用累积总和几乎可以完成此任务 但某些位置对相同的下游点有贡献 此外 最上游的点 或起始点 不会有任何贡献值 并且可以在最终的累积 DataFrame 中保留其起始值 假设每个站点都有以
  • 配置 nginx 发出后台请求

    我正在构建一个应用程序 需要对 api 数据组合使用情况进行一些分析 下面是我的 nginx 配置 location r rewrite r http localhost 3000 sample route1 1 redirect post
  • 与仅使用 Angular 2 路由器相比,了解 ngrx router-store 项目的目的

    我参考的是路由器存储 ngrx 项目 https github com ngrx router store https github com ngrx router store 我不清楚如何使用这个项目 例如 让我们从项目文档中获取以下示例
  • 使用 ReactJS 实现具有状态(启用、部分、禁用)的三态开关的自定义组件

    想要实现类似具有三种状态的开关 ENABLED PENDING DISABLED 有人可以帮我提出这样的组件吗 这是您可以使用的快速功能 它从 0 禁用 循环到 1 部分 最后循环到 2 启用 或任何您想要的值 import React f
  • C++:将读取的二进制文件存储到缓冲区中

    我正在尝试读取二进制文件并将其存储在缓冲区中 问题是 在二进制文件中有多个以空结尾的字符 但它们不在末尾 而是在其他二进制文本之前 因此如果我将文本存储在 0 之后 它只会将其删除缓冲 Example char a this is a 0