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


84

十六进制和二进制是两个不同的基础。以我的理解,十六进制只是二进制文件的易于使用和方便的版本。

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


3
十六进制是二进制数据的某种可读性表示。
Salman A

Answers:


188

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

二进制文件-维基百科

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

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

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

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


85

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

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

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


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

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

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

确实,二进制编辑器应该允许您处理二进制字节,但是如您所见,以2为底的数字太小,无法给出紧凑的数字。

二进制作为原始,而不是基于二

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

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

十六进制编辑器

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

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


1
很好的例子说明了差异。实际上并排看到它们使十六进制看起来好看得多
DrZoo

1
@DrZoo除非您要处理位域,否则二进制表示会更好!en.wikipedia.org/wiki/Bit_field
misha256 '16

6
misha256:说实话,当我看十六进制时,我看到了二进制。我读“ f”,但我的大脑立即说“ 1111”。就像以紧凑的形式查看矩阵。:)
tdrury

4
+1强调“二进制作为原始,而不是基数为2”
Kelvin

5
@tdrury好点,我想过了一会儿,您无论如何表达,都开始“看到”您需要看的东西。哈哈,是的,Matrix!让我想起了一个我上学的人,他很高兴用十六进制或十进制编码机器语言,并且可以在两者之间自由转换。他非常了解所有操作码,并看到位域和其他打包的数据结构,就像他的母语一样。那些是准将64天(更简单的日子),但仍然是令人印象深刻的才能。
misha256 '16

15

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

摘要:

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

笔记:

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

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

  • 称它们为Binary Editors或Byte Editors是不正确的,因为这些编辑器正在更改十六进制数字,而不是二进制数字或字节(当然,如果保存了文件,则基础二进制数字和字节将更改)

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

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

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

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

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

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

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

    例如,哪对数字更容易记住或向他人读出?

    10110000 01100001
    

    要么

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

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

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


3
还请注意,虽然Base 64似乎更容易记住,但我们坚持使用Hex,因为它具有映射2个字符⇒1个字节的好属性。
PythonNut

9

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

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

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

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

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

在此处输入图片说明

它正确地将自己视为二进制编辑器和十六进制编辑器:

在此处输入图片说明

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

在此处输入图片说明


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”一词听起来更好,更短并且更易于键入。


5

人们在使用十六进制时,通常会以二进制形式思考,并且将十六进制用作速记符号。

十六是2的幂。八也是2的幂。因此16和8已用于二进制的简写形式。在二进制和以2为底的幂之间进行手动转换很容易。只需按照目标基数指示的大小将位分组在一起,然后使用相应的数字即可。

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

十六进制,简称十六进制,基数为16,代表每位4位。如今,这是一种更常用的表示形式。


3

这是指计算机如何存储信息。

在基本级别上,计算机使用01表示数据,这些被称为位。分组在一起的八位是一个字节。十六进制以16为底,这意味着它有16个字符(0-9A-F)。要存储一个字符,它需要8位或1个字节。

因此,十六进制数1319十进制)与0001 0011二进制数相同。十六进制比二进制更容易阅读。


2

我知道最早的二进制编辑器也是反汇编程序。意思是,编辑功能是反汇编和修补可执行二进制文件的副产品。

Hiew就是一个很好的例子。

汇编代码(汇编程序指令)通常表示为十六进制字符串。我认为,这就是现代混乱产生的地方。人们只是不知道他们在处理什么。


2

任何已编译且可运行的文件(例如Windows上的somefile.exe)有时都称为“二进制文件”,因为它已被编译为机器级别的代码,该代码在二进制级别正确,可以直接由处理器执行。

因此,您正在编辑二进制文件。它恰好以十六进制显示,因为十六进制对人类有用。


是的,但是许多数据文件也是二进制的。当适当的应用程序读取它们时,它们可以节省空间和翻译。同样,即使文本文件也经常被加密或压缩,使其成为二进制文件。

1

我将按字面值回答您的问题。

首先,要澄清一下。您的意思是,当然是十六进制编辑器。十六进制表示6十进制表示10,因此十六进制表示16Bi表示2。正如您所说的,这是两个不同的基数,即基数16和基数2,这意味着需要16个占位符元素来定义一个十六进制数,而只需要2个元素来定义一个二进制数。

你之前这么说,

If you actually search for "binary editor" on Google, you get hex editors.

现在,对于您的问题,

Why is that? 

这是文字部分。Google会返回大多数人认为满意的搜索结果。他们的机器学习算法在字符串“编辑器”的上下文中将字符串“十六进制”和“十六进制”与“二进制”相关联。由于大多数用户在搜索“二进制”“编辑器”后都对“十六进制”“编辑器”感到满意,因此我们得到了这一点。否则它没有任何意义。

What is the connection?

从字面上看,没有任何东西,因为Google没有任何意义。Google不知道二进制和十六进制之间的区别,它只能列出人们使用搜索引擎的方式。

如果您要在十六进制和二进制之间建立真正的联系,请回到上面的说明,一个十六进制元素编码16种可能性或4位,而二进制元素编码2种可能性或1位。要在一个字节中编码8位信息,我们需要2个十六进制元素或8个二进制元素。因此,您可以看到二进制或十六进制编辑器可以互换使用,因为它们表示相同的数据,只是在不同的视图中。


1

它们之所以称为“二进制”,是因为它们使您可以更改单个位。

默认情况下,UI通常使用十六进制格式,因为它更加方便-例如ffffe0007d13e650 ,在屏幕上占用的空间少于1111111111111111111000000000000001111101000100111110011001010000。(这是来自调试问题的实际地址,而不是虚构的示例。)在十六进制代码中更容易“看到”诸如ascii或Unicode字符之类的内容。

但是,如果您确实希望它们显示,则大多数将切换为显示二进制位。

(为什么我们要在大路边开车,却又在大路边停车?这只是单词。英语常常很奇怪。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.