Почему шестнадцатеричные редакторы называются бинарными редакторами?


84

Шестнадцатеричный и двоичный - две разные базы. Hex, в моем понимании, просто более простая в использовании и более удобная версия бинарного файла.

Тем не менее, я часто слышу, что шестнадцатеричные редакторы являются двоичными редакторами. Если вы ищете «бинарный редактор» в Google, вы получите шестнадцатеричные редакторы.


3
Шестнадцатеричное является несколько читабельным представлением двоичных данных.
Салман A

Ответы:


188

Двоичный редактор редактирует файл в виде двоичного файла .

Двоичный файл - Википедия

Двоичный файл является компьютерным файлом , который не является текстовым файлом. Термин «двоичный файл» часто используется как термин, означающий «нетекстовый файл» [и] обычно рассматривается как последовательность байтов. ... Двоичные файлы обычно содержат байты, которые должны интерпретироваться как нечто отличное от текстовых символов.

Шестнадцатеричный редактор представляет собой тип двоичного редактора , в котором данные представлены в виде шестнадцатеричной .

Шестнадцатеричный редактор - Википедия

Шестнадцатеричный редактор (или двоичный редактор файлов или редактор байт ) является одним из видов компьютерной программы , которая позволяет манипуляцию фундаментальных двоичных данных, составляющие компьютерный файл. Название «hex» происходит от «hexadecimal»: стандартное представление для чисел, у которого в качестве основы 16.


85

Терминология сложна. У разных людей есть разные названия вещей.

В этом случае кажется, что шестнадцатеричное в «hex Editor» относится к общепринятому человеку понятному представлению значения каждого байта, тогда как двоичное в «двоичном редакторе» относится к понятию, что вы действительно редактируете файл в байте. слой (и компьютеры хранят байты в двоичном виде), без учета более высокого уровня кодирования текста и тому подобного. Напомним, что файлы, которые нельзя легко представить в текстовой форме более высокого уровня, называются «двоичными файлами» или «двоичными файлами» по той же причине.

Ни то, ни другое технически неверно; они просто приходят к проблеме именования с разных сторон. Что касается личной заметки, я бы согласился с тем, что «двоичный редактор» сбивает с толку.


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, когда они его читают.
Установка / извлечение битов из байта, записанного в шестнадцатеричном формате, на самом деле требует не больше усилий, чем байт, записанный в бине.
Честно говоря, я нашел шестнадцатеричный код легче, чем двоичный.


1
Хорошие примеры, показывающие разницу. На самом деле, видя их рядом, гекс выглядит намного лучше
DrZoo

1
@DrZoo Если вы не имеете дело с битовыми полями, в этом случае двоичное представление намного лучше! en.wikipedia.org/wiki/Bit_field .
misha256

6
misha256: честно говоря, когда я смотрю на hex - я вижу бинарный файл. Я читаю «f», но мой мозг сразу говорит «1111». Это похоже на просмотр матрицы в компактном виде. :)
tdrury

4
+1 за акцент на «Бинарный как сырой, а не базовый два»
Кельвин

5
@tdrury хорошая точка зрения, я полагаю, через некоторое время вы просто начинаете «видеть» то, что вам нужно увидеть, независимо от того, как это выражено. Хаха, да, Матрица! Напоминает мне парня, с которым я ходил в школу, который счастливо кодировал машинный язык в шестнадцатеричном или десятичном виде и мог свободно конвертировать между ними. Он знал все коды операций наизусть и видел битовые поля и другие структуры упакованных данных, как будто это был его первый язык. Имейте в виду, что это были Commodore 64 дня (гораздо более простые дни), но все же впечатляющий талант.
misha256

15

Почему шестнадцатеричные редакторы называются бинарными редакторами?

Резюме:

Шестнадцатеричный редактор используется для непосредственного редактирования двоичного файла, отображая двоичное содержимое в шестнадцатеричном формате и позволяя изменять эти шестнадцатеричные числа.

Примечания:

  • Шестнадцатеричные редакторы позволяют редактировать содержимое необработанных данных файла вместо других программ, которые пытаются интерпретировать данные.

  • Шестнадцатеричные редакторы, также называемые двоичными редакторами или байтовыми редакторами.

  • Называть их двоичными редакторами или байтовыми редакторами не совсем правильно, так как редакторы меняют шестнадцатеричные числа, а не двоичные числа или байты (конечно, базовые двоичные числа и байты изменятся, если файл будет сохранен)

Почему мы редактируем двоичное использование шестнадцатеричного?

Проще непосредственно просматривать или редактировать / изменять двоичные файлы, отображая данные в шестнадцатеричной форме и изменяя шестнадцатеричные значения.

  • Одним из удобных способов представления двоичных чисел является использование шестнадцатеричного числа.

  • Исторически компьютеры были запрограммированы на ассемблере, где код был написан с использованием инструкций процессора и мета-утверждений (известных как директивы, псевдоинструкции и псевдооперации), комментариев и данных.

    • Код переводится в двоичный файл с использованием ассемблера. Затем двоичный код может быть загружен в процесс и выполнен.

    • Без исходного кода проще изменить программу напрямую, используя редактор, который отображает программу в шестнадцатеричном, а не двоичном формате.

  • Двоичный код легче читается людьми при преобразовании в шестнадцатеричный.

    Например, какую пару чисел легче запомнить или прочитать кому-то еще?

    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, который может выгружать память в шестнадцатеричном формате для встроенного видео с 40 колонками, а расширение значений в двоичном формате на экране 80x24 быстро выгонит вас из комнаты. Для этих старых систем также проще написать подпрограммы для преобразования введенного ASCII обратно в правильные значения. Важно, чтобы 4 КБ ОЗУ считалось большим объемом памяти, а системы могли иметь только столько ПЗУ.

  • Слово «шестнадцатеричный» звучит лучше, короче и его легче набирать.


5

Когда люди используют гекс, они обычно думают в двоичном формате и используют гекс в качестве сокращенной записи.

Шестнадцать - это степень 2. Восемь также является степенью двойки. Таким образом, 16 и 8 были использованы для сокращенного обозначения двоичного файла. Ручное преобразование между двоичным и основанием некоторой степени двух легко. Просто сгруппируйте биты вместе в размере, указанном целевой базой, а затем используйте соответствующую цифру.

Base 8, восьмеричная, была популярна для многих ранних компьютеров, поэтому Unix имеет odвосьмеричную команду dump. Каждая восьмеричная цифра представляет 3 бита за раз. Но это было неудобно для машин на основе 8-битных байтов.

Шестнадцатеричный, шестнадцатеричный, для основания, 16, представляет 4 бита на цифру. Это гораздо более распространенное представление в наши дни.


3

Это относится к тому, как компьютеры хранят информацию.

На базовом уровне компьютеры используют 0и 1для представления данных, они называются битами. Восемь битов, сгруппированных вместе - это байт. Шестнадцатеричное - это основание 16, что означает, что оно имеет 16 символов ( 0-9, A-F). Для хранения символа требуется 8 бит или 1 байт.

Таким образом, шестнадцатеричное число 13( 19в десятичном виде) такое же, как 0001 0011в двоичном. Легче читать шестнадцатеричный код, чем двоичный.


2

Самые ранние двоичные редакторы, которых я знаю, также были дизассемблерами. Это означает, что возможность редактирования была побочным продуктом при разборке и исправлении исполняемого двоичного файла.

Хорошим примером такого приложения является Hiew.

Собранный код (инструкции ассемблера) часто представляется в виде шестнадцатеричных строк. Я думаю, что здесь возникает современная путаница. Люди просто не знают, с чем имеют дело.


2

Любой скомпилированный исполняемый файл (например, somefile.exe, например, в Windows) иногда называют «двоичным», поскольку он был скомпилирован в код машинного уровня, который корректен на двоичном уровне для непосредственного выполнения процессором.

Итак, вы редактируете двоичный файл. Просто это происходит в шестнадцатеричном формате, потому что он полезен для людей.


Да, но многие файлы данных также являются двоичными. Они экономят место и перевод, когда читаются соответствующим приложением. Кроме того, даже текстовые файлы часто шифруются или сжимаются, превращая их в двоичные файлы.
Джо

1

Я собираюсь ответить на ваши вопросы буквально.

Сначала немного уточнений. Вы имеете в виду, конечно, шестнадцатеричный редактор. Шестнадцатеричное означает 6, а десятичное означает 10 , поэтому шестнадцатеричное означает 16 . Би означает 2 . Как вы сказали, это две разные базы, база 16 и база 2, что означает, что для определения шестнадцатеричного числа требуется 16 элементов-заполнителей и всего 2 элемента для определения двоичного числа.

Вы сказали, что,

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

А теперь на ваши вопросы,

Why is that? 

Это буквальная часть. Google возвращает то, что большинство людей считают удовлетворительными результатами своих поисков. Их алгоритмы машинного обучения связывают строки «шестнадцатеричный» и «шестнадцатеричный» с «двоичным» в контексте строки «редактор». Так как большинство пользователей были удовлетворены «hex» «редактором» после того, как они искали «бинарный» «редактор», это то, что мы получаем. Это не имеет никакого значения в противном случае.

What is the connection?

Буквально снова, нет, так как Google не возвращает никакого смысла. Google не знает разницы между двоичным и шестнадцатеричным, он может только сводить в таблицу, как люди используют свою поисковую систему.

Если вы запрашивали реальную связь между шестнадцатеричным и двоичным, то, возвращаясь к моему пояснению выше, один шестнадцатеричный элемент кодирует 16 возможностей или 4 бита, а двоичный элемент кодирует 2 возможности или 1 бит. Чтобы закодировать 8 бит информации в байте, нам нужно 2 шестнадцатеричных элемента или 8 двоичных элементов. Таким образом, вы можете видеть, что двоичные или шестнадцатеричные редакторы могут использоваться взаимозаменяемо, поскольку они представляют одни и те же данные, только в разных представлениях.


1

Их называют «двоичными», потому что они позволяют вам изменять отдельные биты.

Пользовательский интерфейс обычно работает в шестнадцатеричном формате по умолчанию, потому что это более удобно - например, ffffe0007d13e650 занимает меньше места на экране, чем 1111111111111111111000000000000001111101000100111110011001010000. (Это реальный адрес от проблемы отладки, а не выдуманный пример.) В шестнадцатеричном коде также легче «видеть» такие вещи, как символы ascii или Unicode.

Но большинство из них переключатся на отображение двоичных битов, если вы действительно этого хотите.

(Почему мы едем по бульвару, но паркуемся по дороге? Это просто слова. Английский часто странный.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.