1

据我所知,通过使用 wb 模式在 C 中保存文件,我不应该在保存的文件中看到二进制数(零和一)。

当我以 wb 模式保存时,文件中的输出为:

Feras Wilson — n FFFF îè` c P xHF F û¥2012

但这不是二进制零和一。如何保存文件以包含零和一,然后能够在 C 中读取它?

4

3 回答 3

7

它保存为 0 和 1,但您的文本编辑器将它们读取为字节(它将它们分组为 8 位)并使用 ASCII 显示它们。[1]

当您写入文本文件时,需要付出很多努力来解释您希望写入的二进制数据,以便将其放入人类可读的格式中。

例如,如果您写数字255,则必须将其带到表格'2', '5', '5'(它们是字符!),然后写下每个字符。

如果它写入二进制文件,它只会将实际的二进制数据放入文件中。这取决于它是什么类型的变量(取决于它在多少个八位字节上表示它)以及字节顺序和其他东西。如果它是无符号字符,它将放入二进制文件0b11111111(这是实际的原始数字,而不是字符!)。

[1] http://www.asciitable.com/

于 2012-09-18T08:41:43.210 回答
5

这只是您的编辑器或命令对文件的文本表示。在内部,所有文件都以 0 和 1 存储在 HDD/SDD/RAM/... - 尝试使用十六进制编辑器打开文件bless(在 linux 上易于使用,Windows 需要 Mono - 或者搜索您想要的另一个十六进制编辑器使用)查看字节是如何存储的。此外,我建议使用bless,因为 if 以不同的格式提供不同的表示。

在您的代码中,您可以使用 read 方法按字节存储内容并对其进行解释。如果您一次读取多个字节,请记住可能的字节顺序修复。也就是说,Little Endian 和 Big Endian 系统以“相反”的顺序存储和读取字节。正在读取的单词0x1337可能被读取为0x3713. 只需熟悉这个术语并在必要时使用 Wikipedia 来了解如何处理它。

于 2012-09-18T08:41:46.140 回答
3

所有文件都以二进制形式存储!这只是一个连续程序如何查看/解释这个二进制文件的问题。根据您使用此文件的方式,它将被读取为表示字符的字节序列,或表示指令的字节序列,或表示 Unicode 等的单词等。

如果您想查看不同格式的文件,请使用od

姓名

   od - dump files in octal and other formats

它将以十六进制、字符、八进制等形式转储您的文件(它不会做的一件事是以二进制形式显示,但您可以很容易地从八进制/十六进制输出中导出它)

于 2012-09-18T08:47:03.840 回答