在二进制文件上使用Getline

乔纳森·米

我已经读过,getline表现为未格式化的输入函数。我相信应该允许它在二进制文件上使用。举例来说,我已经这样做了:

ofstream ouput("foo.txt", ios_base::binary);
const auto foo = "lorem ipsum";

output.write(foo, strlen(foo) + 1);
output.close();

ifstream input("foo.txt", ios_base::binary);
string bar;

getline(input, bar, '\0');

那是违反任何规则吗?看来工作正常,我认为我传统上只是通过写大小然后写数组来处理数组。

杰里·科芬(Jerry Coffin)

不,这没有违反我所看到的任何规则。

是的,写一个带有前缀大小的数组比较常见,但是使用定界符标记结尾也可以很好地工作。最大的区别是(与文本文件一样)您必须通读数据才能找到下一个项目。使用带前缀的尺寸,您可以查看尺寸,如果不需要当前尺寸,则直接跳到下一个尺寸。当然,您还需要确保如果要使用某些内容标记字段的结尾,则该字段永远不会出现在字段内部(或者想出某种方法来检测字段何时在字段内部,以便您可以阅读其余部分则视情况而定)。

根据情况,这可能意味着(例如)使用Unicode文本。这为您提供了很多选项,可用于文本内无法出现的值(因为它们不是合法的Unicode)。另一方面,这也意味着您的“二进制”文件实际上是一个文本文件,并且必须遵循一些基本的文本文件规则才有意义。

哪个更好,取决于您想要读取文件的随机片段而不是从头到尾进行遍历的可能性,以及查找唯一定界符的难度(如果有),以及是否只有一个,使分隔符从字段内部的数据可识别的复杂性。如果仅按顺序写入数据才有意义,那么不必按顺序读取数据就不会造成真正的问题。如果您可以有意义地阅读各个部分,那么能够做得更多可能会很有用。

最后,归结为一个问题,即您想要从文件中获取什么是“二进制”,在典型情况下,所有“二进制”实际上意味着可以从换行符转换的行标记的末尾(例如)回车/换行对的字符将不是。取决于您使用的操作系统,它可能甚至没有太大意义,例如,在Linux上,二进制和文本模式之间通常根本没有区别。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

二进制文件如何“二进制”?

来自分类Dev

使用noexec选项在文件系统上执行bash脚本或ac二进制文件

来自分类Dev

二进制文件未在Debian Wheezy上运行

来自分类Dev

Heroku上的自定义二进制文件

来自分类Dev

从Matlab上的二进制文件读取稀疏数组

来自分类Dev

无法在Mac OS上执行二进制文件

来自分类Dev

Linux上大型文件的二进制差异/补丁?

来自分类Dev

无法在Ubuntu 17.10上执行二进制文件

来自分类Dev

二进制文件未在Debian Wheezy上运行

来自分类Dev

如何在Heroku上运行二进制文件

来自分类Dev

在 Python 上读取二进制文件

来自分类Dev

无法在离线机器上执行二进制文件

来自分类Dev

MVVMCross二进制文件:在Mac和Win8上都可以使用的二进制文件

来自分类Dev

使用Selenium WebDriver在Windows上设置FireFox二进制文件的路径

来自分类Dev

如何使用当前预览在.NET Core上构建本机二进制文件?

来自分类Dev

通过HTML5在Android上使用二进制字符串保存文件

来自分类Dev

在github上发布基于golang的二进制文件,以使用“ go get”安装

来自分类Dev

如何使用npm在64位系统上构建32位二进制文件?

来自分类Dev

为什么在二进制文件上使用cat会使终端混乱?

来自分类Dev

在服务器上使用Runtime.exec执行二进制Java文件

来自分类Dev

为了在Bluemix上使用C语言的二进制文件该怎么做

来自分类Dev

为什么在二进制文件上使用cat会使终端混乱?

来自分类Dev

如何在Linux上的C库中使用已编译的二进制文件?

来自分类Dev

在二进制文件上使用numpy fromfile返回1维ndarray

来自分类Dev

使用Valgrind在X86 / Linux机器上检测ARM二进制文件

来自分类Dev

如何使用npm在64位系统上构建32位二进制文件?

来自分类Dev

我可以在Linux,* BSD和Illumos上使用相同的二进制文件吗?

来自分类Dev

conda安装的二进制文件与anaconda.org上的二进制文件不同

来自分类Dev

使用Arduino在SD上读写二进制数据

Related 相关文章

  1. 1

    二进制文件如何“二进制”?

  2. 2

    使用noexec选项在文件系统上执行bash脚本或ac二进制文件

  3. 3

    二进制文件未在Debian Wheezy上运行

  4. 4

    Heroku上的自定义二进制文件

  5. 5

    从Matlab上的二进制文件读取稀疏数组

  6. 6

    无法在Mac OS上执行二进制文件

  7. 7

    Linux上大型文件的二进制差异/补丁?

  8. 8

    无法在Ubuntu 17.10上执行二进制文件

  9. 9

    二进制文件未在Debian Wheezy上运行

  10. 10

    如何在Heroku上运行二进制文件

  11. 11

    在 Python 上读取二进制文件

  12. 12

    无法在离线机器上执行二进制文件

  13. 13

    MVVMCross二进制文件:在Mac和Win8上都可以使用的二进制文件

  14. 14

    使用Selenium WebDriver在Windows上设置FireFox二进制文件的路径

  15. 15

    如何使用当前预览在.NET Core上构建本机二进制文件?

  16. 16

    通过HTML5在Android上使用二进制字符串保存文件

  17. 17

    在github上发布基于golang的二进制文件,以使用“ go get”安装

  18. 18

    如何使用npm在64位系统上构建32位二进制文件?

  19. 19

    为什么在二进制文件上使用cat会使终端混乱?

  20. 20

    在服务器上使用Runtime.exec执行二进制Java文件

  21. 21

    为了在Bluemix上使用C语言的二进制文件该怎么做

  22. 22

    为什么在二进制文件上使用cat会使终端混乱?

  23. 23

    如何在Linux上的C库中使用已编译的二进制文件?

  24. 24

    在二进制文件上使用numpy fromfile返回1维ndarray

  25. 25

    使用Valgrind在X86 / Linux机器上检测ARM二进制文件

  26. 26

    如何使用npm在64位系统上构建32位二进制文件?

  27. 27

    我可以在Linux,* BSD和Illumos上使用相同的二进制文件吗?

  28. 28

    conda安装的二进制文件与anaconda.org上的二进制文件不同

  29. 29

    使用Arduino在SD上读写二进制数据

热门标签

归档