【问题标题】:In-depth understanding of binary files深入理解二进制文件
【发布时间】:2013-06-13 22:31:10
【问题描述】:

我正在专门学习有关二进制文件结构/操作的 C++,由于我对二进制文件、位、位和十六进制数这个主题完全陌生,我决定退后一步,建立对主题的深刻理解。

在我下面包含的图片中,我在.txt 文件中写了两个单词(blue thief)。

这样做的原因是,当我使用 hexeditor 解码文件时,我想了解信息是如何真正以 hex 格式存储的。现在,不要误会我的意思,我并不是想整天以阅读十六进制格式为生,而只是对二进制文件组成的基础知识有最低程度的了解。我也知道所有文件都有不同的结构,但为了理解起见,我想知道“蓝色小偷”这个词和一个 ' '(空格)究竟是如何转换成这些字符的。

还有一点,我听说二进制文件包含三种信息:

header, ftm & 和 data!那只涉及音频,视频等多媒体文件吗?因为,除了这个文件中看起来像 data 块之外,我似乎看不到任何东西。

【问题讨论】:

  • 有什么问题?您已经了解了文本文件和二进制文件之间的区别。像您的示例这样的文本文件只包含您在记事本中看到的字符——不多也不少。在 Windows 系统上,二进制文件是任何不是文本文件的东西。 (在 Unix 上,区别变得更加模糊......)它不必包含一个标头来标识数据编码的格式,但大多数都包含。标头的大小和结构可能有很大差异。
  • @dodgethesteamroller 我只是想知道字母是如何转换的,这样我就可以了解文本十六进制转换的工作原理和可能,如果在记事本中还有更多信息需要了解
  • 好的,我明白了。 :) 将我的评论扩展到答案...
  • @dodgethesteamroller 更像它。虽然,你在它。也许撤销 dv :) ?
  • 对不起,我不是给你投反对票的人,但我可以取消它到 0...

标签: windows hex binary-data bits hex-editors


【解决方案1】:

文本文件中的字符以a Windows extensionASCII 编码--您在记事本中看到的每个字符对应一个字节。所见即所得。

通常,Windows 系统上的文本文件和二进制文件之间存在严格的区别。在 Unix/Linux 系统上,区别比较模糊……实际上,您可以争辩说没有区别。

在 Windows 系统上,区分由文件扩展名强制执行。所有扩展名为“.TXT”的文件都被假定为文本文件(即,仅包含表示屏幕上可见字符的十六进制代码,其中“可见”包括空格)。

二进制文件是完全不同的鱼。正如您所提到的,大多数都包含某种标题,描述了随后的数据是如何编码的。根据数据的类型,这些标头的大小可能会有很大差异(同样,假设由 Windows 系统和 Unix 上的扩展名指示)。一个简单的例子是用于未压缩音频的WAV format。如果您在十六进制编辑程序中打开 WAV 文件,您会看到前四个字节是“RIFF”——这是一个标记,通常称为“幻数”,尽管它可以作为文本读取,表示内容是一个音频文件。较新版本的 WAV 规范稍微复杂化了这一点,但最初 WAV 标头只是“RIFF”标签加上十几个字节,指示以下数据的采样率。 (您可以通过将音频 CD 上的轨道中的原始数据与通过以 ​​44.1 KHz 翻录该轨道的未压缩副本创建的 WAV 文件进行比较来看到这一点——数据应该是相同的,只是在WAV 文件的开头。)

可执行文件(已编译的程序)是一种特殊类型的二进制文件,但它们大致遵循相同的方案,即标题后跟规定格式的数据。但是,在这种情况下,“数据”是可执行的机器代码,并且标头指示文件运行的操作系统等。 (例如,大多数 Linux 可执行文件begin with the characters "ELF"。)

【讨论】:

  • 令人印象深刻。你只是或多或少地描述了我想知道的。最后一个问题。我怎样才能更多地了解这一点?您会推荐哪个链接来帮助我理解这一点?
  • @bluethief 取决于你想走的方向。有关文件扩展名和不同编码数据方式的更多信息,this Wikipedia list of file formats 看起来是一个好的开始。有关文本文件中字符编码的更多信息,请首先点击上面的 ASCII 链接,然后阅读 Unicode。如果您对这些表示如何在硬件级别上工作感兴趣,您可以阅读binarydisk drives
最近更新 更多