我正在学习C ++,特别是关于二进制文件结构/操作,因为我对二进制文件,bit,bites&的主题完全不熟悉。十六进制数,我决定向后退一步,建立对主题的扎实理解。
在下面的图片中,我在blue thief
文件中写了两个单词(.txt
)。
原因是,当我使用hexeditor解码文件时,我想了解信息是如何以十六进制格式存储的。现在,不要误解我的意思,我并不是试图通过整天阅读十六进制格式来谋生,而只是对二进制文件组合的基本知识有最低限度的理解。我也知道所有文件都有不同的结构,但只是为了理解,我想知道,“蓝色小偷”和单个' '
(空格)这些词语究竟是如何转换成这些字符的。
还有一件事是,我听说二进制文件包含三种类型的信息:
header
,ftm
&和data
!那只关注音频,视频等多媒体文件吗?因为,我似乎看不到任何东西,除了它看起来只是这个文件中的data
块。
答案 0 :(得分:6)
文本文件中的字符以a Windows extension的ASCII编码 - 您在记事本中看到的每个字符都有一个字节。你所看到的就是你得到的。
通常,Windows系统上的文本和二进制文件之间存在严格区别。在Unix / Linux系统上,区别是模糊的......事实上你可以说没有区别。
在Windows系统上,区别由文件扩展名强制执行。扩展名为“.TXT”的所有文件都被假定为文本文件(即,仅包含表示可见屏幕上字符的十六进制代码,其中“visible”包含空格)。
二进制文件是一整套不同的鱼。正如您所提到的,大多数都包含一些描述后续数据如何编码的标题。根据数据类型,这些标题的大小可能会有很大差异(再次假设在Windows系统和Unix上的扩展名表示)。一个简单的例子是未压缩音频的WAV format。如果你在十六进制编辑程序中打开一个WAV文件,你会看到前四个字节是“RIFF” - 这是一个标记,通常称为“幻数”,即使它是可读的文本,表明内容是一个音频文件。较新版本的WAV规范有点复杂,但最初WAV标题只是“RIFF”标记加上十几个字节,表示以下数据的采样率。 (您可以通过将音频CD上的轨道中的原始数据与通过以44.1 KHz翻录该轨道的未压缩副本而创建的WAV文件进行比较来看到这一点 - 数据应该相同,只需添加标题部分启动WAV文件。)
可执行文件(编译程序)是一种特殊类型的二进制文件,但它们遵循大致相同的标头方案,后跟规定格式的数据。但是,在这种情况下,“数据”是可执行的机器代码,并且标题指示文件在哪个操作系统上运行。 (例如,大多数Linux可执行文件begin with the characters "ELF"。)