4

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

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

在此处输入图像描述

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

还有一件事,我听说二进制文件包含三种类型的信息:

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

4

1 回答 1

6

文本文件中的字符以ASCII的 Windows 扩展名进行编码——您在记事本中看到的每个字符一个字节。你所看到的就是你得到的。

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

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

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

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

于 2013-06-17T21:16:28.260 回答