在 C 中另存为二进制文件,但不显示零和一



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

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

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

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

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

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

例如,如果你写数字255,它必须把它变成'2''5''5'(这是字符!)的形式,然后写下每个字符。

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

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

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

在代码中,可以使用 read 方法按字节存储内容并对此进行解释。如果您一次读取多个字节,请记住可能的字节序修复。也就是说,小端和大端系统以"相反"的顺序存储和读取字节。正在阅读0x1337单词可能会被读作0x3713。只需熟悉这个术语,并在必要时使用维基百科来了解如何处理这个问题。

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

如果您想

查看不同格式的文件,请使用od

名字

   od - dump files in octal and other formats

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

最新更新