为什么十六进制编辑器被称为二进制编辑器?

Jos*_*eph 84 hex-editor binary-files hexadecimal

十六进制和二进制是两种不同的基数。以我的理解,十六进制只是一种更易于使用和更方便的二进制版本。

但是,我经常听说十六进制编辑器是二进制编辑器。如果您在 Google 上搜索“二进制编辑器”,则会得到十六进制编辑器。

Ste*_*ven 187

一个二进制编辑器编辑一个文件作为二进制文件

二进制文件 - 维基百科

一个二进制文件是不是文本文件的计算机文件。术语“二进制文件”通常用作术语,意思是“非文本文件”[并且] 通常被认为是一个字节序列。... 二进制文件通常包含旨在被解释为文本字符以外的东西的字节。

十六进制编辑器是一种类型的二进制编辑器,其中所述数据在所表示十六进制

十六进制编辑器 - 维基百科

十六进制编辑器(或二进制文件编辑器字节编辑)是一种类型的计算机程序,其允许在构成计算机文件中的基本的二进制数据的操纵。名称“十六进制”来自“十六进制”:以 16 为基数的数字的标准表示。


Lig*_*bit 86

术语很难。不同的人对事物有各种不同的名称。

在这种情况下,似乎在十六进制的“十六进制编辑器”是指每个字节的值的传统人类可读表示,而二进制中的“二进制编辑器”指的是概念,你确实是在字节编辑文件层(和计算机以二进制形式存储字节),而不考虑更高级别的文本编码等。回想一下,出于同样的原因,不容易以更高级别的文本形式表示的文件被称为“二进制文件”或“二进制文件”。

从技术上讲,两者都不是错误的;他们只是从不同的角度来解决命名问题。不过,就个人而言,我倾向于同意“二进制编辑器”在平衡上令人困惑。


Mar*_*oom 58

二进制编辑器显示(二进制)

00000000 | 11111011 11111011 11111011 11111011 11110101 11111011 11111011 11111011
00001000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00010000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00011000 | 11110101 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00100000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00101000 | 11111011 11111011 11101111 11111011 11111011 11111011 11111011 11111011
00110000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00111000 | 11111011 11111011 11111011 11101111 11111011 11111011 11111011 11111011
01000000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01001000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01010000 | 11101111 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01011000 | 11101111 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01100000 | 11111011 11111011 11111011 11111011 11111011 11101111 11111011 11111011
01101000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
Run Code Online (Sandbox Code Playgroud)

二进制编辑器显示(十六进制)

00 | fb fb fb fb f5 fb fb fb fb fb fb fb fb fb fb fb
10 | fb fb fb fb fb fb fb fb f5 fb fb fb fb fb fb fb 
20 | fb fb fb fb fb fb fb fb fb fb ef fb fb fb fb fb 
30 | fb fb fb fb fb fb fb fb fb fb fb ef fb fb fb fb 
40 | fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb 
50 | ef fb fb fb fb fb fb fb ef fb fb fb fb fb fb fb 
60 | fb fb fb fb fb ef fb fb fb fb fb fb fb fb fb fb
Run Code Online (Sandbox Code Playgroud)

确实,二进制编辑器应该让您以二进制形式处理字节,但正如您所见,基数 2 太小而无法提供紧凑的数字。

原始二进制,而不是基数二

一般来说,那么二进制编辑器中的“二进制”并不是指基数二,它实际上是“文本编辑器”的反义词。 不同之处在于文本编辑器旨在显示文本,因此不需要安全处理非打印字符、换行符、控制字符、无效的 utf-8 代码单元等。 仅仅打开文件并立即保存它的行为就可以改变它(由于编辑器内部转换、失败)。

另一方面,二进制编辑器不要试图赋予数据任何语义,而是让用户将其作为字节/位/字流安全地处理。

十六进制编辑器

完美的二进制编辑器会知道所有可能的二进制格式并让您对其进行编辑,但是由于每个人都可以创建自己的二进制格式,并且由于它们经常更改,因此尝试支持所有格式是徒劳的。
编辑器能做的最好的事情就是显示字节本身,并且由于已经讨论过的基数 16 的属性,十六进制数字非常方便!

此外,有经验的用户可以在阅读时将 bin 转换为十六进制。
从以十六进制写入的字节中设置/获取一点实际上绝对不会比以 bin 写入的字节花费更多的努力。
老实说,我发现十六进制比二进制更容易阅读。

  • misha256:老实说,当我查看十六进制时 - 我看到的是二进制。我读到“f”,但我的大脑立即说“1111”。这就像以紧凑的形式查看矩阵。:) (6认同)
  • @tdrury 好点,我想过一段时间你就会开始“看到”你需要看到的东西,不管它是如何表达的。哈哈,是的,矩阵!让我想起我上学时的一个人,他愉快地用十六进制或十进制编写机器语言,并且可以在两者之间自由转换。他熟记所有的操作码,看到位域和其他打包的数据结构,就像他的母语一样。请注意,那些是 Commodore 的 64 天(简单得多的日子),但仍然是令人印象深刻的才能。 (5认同)
  • +1 强调“二进制为原始值,而不是基数为 2” (4认同)

Dav*_*ill 15

为什么十六进制编辑器被称为二进制编辑器?

概括:

十六进制编辑器用于通过以十六进制格式显示二进制内容并允许更改这些十六进制数来直接编辑二进制文件。

笔记:

  • 十六进制编辑器允许编辑文件的原始数据内容,而不是其他试图解释数据的程序。

  • 十六进制编辑器也称为二进制编辑器或字节编辑器。

  • 称它们为二进制编辑器或字节编辑器并不正确​​,因为编辑器正在更改十六进制数而不是二进制数或字节(当然,如果保存文件,底层的二进制数和字节将更改)

为什么我们编辑二进制使用十六进制?

通过以十六进制形式显示数据并更改十六进制值,可以更容易地直接查看或编辑/修改二进制文件。

  • 表示二进制数的一种便捷方式是使用十六进制。

  • 历史上,计算机是用汇编语言编程的,其中代码是使用处理器指令和元语句(也称为指令、伪指令和伪操作)、注释和数据编写的。

    • 使用汇编程序将代码转换为二进制文件。然后可以将二进制代码加载到进程中并执行。

    • 如果没有源代码,直接使用以十六进制而不是二进制显示程序的编辑器来修改程序会更容易。

  • 二进制代码在转换为十六进制时更容易被人类阅读。

    例如,哪一对数字更容易记住或朗读给其他人?

    10110000 01100001
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    B0 61
    
    Run Code Online (Sandbox Code Playgroud)
  • 每个十六进制数字代表四个二进制数字(位)。一个十六进制数字代表一个半字节,它是一个八位字节或字节(8 位)的一半。

    例如,字节值的范围可以从 0 到 255(十进制),但可以更方便地表示为 00 到 FF 范围内的两个十六进制数字。

  • 十六进制也常用于表示计算机内存地址。

  • 另请注意,虽然 Base 64 似乎更容易记忆,但我们坚持使用 Hex,因为它具有映射 2 个字符 ⇒ 1 个字节的良好特性。 (3认同)

jll*_*gre 9

根据几种编程语言和操作系统约定,有两种文件:

  • 由一组文本行组成的文本文件,每行由一组可打印字符(包括一些控制字符)组成并以行尾终止
  • 包含任意字节组的二进制文件,包括文本文件中禁止的空字节。

文本编辑器能够打开文本文件,而二进制编辑器对其处理的文件类型没有限制。

事实上,二进制编辑器通常表示并允许以十六进制输入数据只是一种方便(它们经常显示并允许替换 ascii 字符),仅以纯二进制显示数据会使数据不太清晰。

流行的二进制编辑器名为HexEdit

在此处输入图片说明

它正确地认为自己既是二进制编辑器又是十六进制编辑器:

在此处输入图片说明

甚至可以选择不以十六进制显示数据而只显示文本

在此处输入图片说明


inf*_*xed 5

当人们使用十六进制时,他们通常会考虑二进制并将十六进制用作速记符号。

十六是 2 的幂。八也是 2 的幂。所以 16 和 8 已被用于二进制的速记符号。二进制之间的手动转换和二的某个幂的基数很容易。只需按照目标基数指示的大小将位组合在一起,然后使用相应的数字。

Base 8(八进制)在许多早期计算机中都很流行,这就是 Unix 具有od八进制转储命令的原因。每个八进制数字一次代表 3 位。但是对于基于 8 位字节的机器来说很不方便。

十六进制,简称hex,基数为16,代表每位数4位。这是当今更常用的表示法。


Law*_*ceC 5

今天绝大多数计算机上的文件都是 8 位字节。这通常是直接编辑文件时使用的抽象。

当然,有机会实际编辑单个数据位,但不经常。常见的位级操作,如设置位 7 无论如何都很容易用十六进制进行 - 1000 0000 base2 = 80 base16,所以如果十六进制值低于 80 base2位 7 是明确的,添加 8 base16将设置它。

十六进制与此类活动更密切相关的其他原因:

  • 在视觉扫描已知值时,十六进制值更容易识别。例如,20 base16 = 32 这是一个 ASCII 空间,但在大量其他转储值中,相同的值 0010 0000 base2并不那么容易识别。

  • 您实际上需要定期使用它的旧系统可能具有有限的屏幕空间(例如 40 列)。Apple IIe ROM 监视器就是一个很好的例子,它可以将十六进制内存转储到 40 列集成视频,并且在 80x24 屏幕上将值扩展为二进制会很快使您耗尽空间。对于这些旧系统,编写例程将输入的 ASCII 转换回正确的值也更容易。重要的是 4K 的 RAM 被认为是大量内存,而系统可能只有同样多的 ROM。

  • “hex”这个词听起来更好,更短,更容易打字。