stringtranslate.com

БинХекс

BinHex , первоначально сокращение от «двоичное преобразование в шестнадцатеричное», представляет собой систему кодирования двоичного кода в текст , которая использовалась в классической Mac OS для отправки двоичных файлов по электронной почте . Первоначально это была шестнадцатеричная кодировка, последующие версии BinHex больше похожи на uuencode , но объединили обе «вилки» файловой системы Mac вместе с расширенной информацией о файлах. Файлы BinHexed занимают больше места, чем исходные файлы, но не будут повреждены программным обеспечением , отличным от « 8-битного чистого ».

История

TRS-80 BinHex (.hex)

BinHex был первоначально написан в 1981 году Тимом Манном для TRS-80 как отдельная версия схемы кодирования, первоначально встроенной в популярный эмулятор терминала ST80-III Ланса Миклуса. BinHex использовался для отправки файлов через основные онлайн-сервисы , такие как CompuServe , которые не были «8-битными» и для выживания требовали защиты ASCII . Однако не все использовали ST-80, поэтому Манн написал BinHex, чтобы позволить пользователям других терминалов использовать этот формат. [1]

Исходная система ST-80 работала путем преобразования содержимого двоичного файла в шестнадцатеричные числа, которые кодировались цифрами и буквами ASCII0 ( – 9, AF). Затем он добавлял новую строку после каждых 60 символов. Система стала очень популярной после того, как Манн загрузил ее в файловую область TRS-80 CompuServe. Система быстро добавила контрольную сумму в конце каждой строки для проверки на наличие ошибок. Билл Стоквелл преобразовал эту версию в компилятор BASIC/S, который работал намного быстрее, чем интерпретированная версия Манна. [1]

Файлам BinHex той эпохи обычно присваивалось расширение .hex . Вскоре появились порты для других популярных платформ той эпохи, включая Apple II . Позже CompuServe добавила поддержку 8-битной передачи, и этот формат быстро исчез. [1]

Mac BinHex (.hex)

Проблема с загрузкой файлов все еще существовала на CompuServe, когда Mac был впервые выпущен в 1984 году. В апреле 1984 года Уильям Дэвис портировал BinHex на Mac с использованием Microsoft BASIC , чтобы создать версию, которая во многом была идентична версиям TRS-80 той же эпохи. [1] Эта версия поддерживала только кодирование «вилки данных», игнорируя вилку ресурса , что означало, что ее можно было использовать только для файлов данных. Рост использования электронной почты в Интернете примерно совпал с выпуском Macintosh, и версия Дэвиса была размещена в списке рассылки Info-Mac Джоэлом Хеллером в июне 1984 года. В 1984 году было опубликовано несколько новых версий, в результате чего появился BinHex 3, который мог бы закодировать обе вилки.

Ив Лемперёр, автор первого ассемблера для Mac, MacASM, обнаружил, что для загрузки своих файлов на CompuServe ему приходится использовать BinHex. Версия BASIC была очень медленной, поэтому Лемпер портировал BinHex 3 на ассемблер и выпустил ее как BinHex 1.0. Программа была примерно в сто раз быстрее версии BASIC, и вскоре запросы на обновление посыпались потоком .

Компактный BinHex (.hcx)

Исходный формат BinHex был довольно простым, но не очень эффективным, поскольку он расширял каждый входной байт на два, как того требует шестнадцатеричное представление — кодировка 8–4 бита. Для BinHex 2.0 Лемперёр использовал новую кодировку 8-6, которая уменьшила размер файла на 50%. Он также воспользовался возможностью расширить контрольную сумму с 8 до 16 бит. [2]

В этой новой кодировке для представления данных использовались первые 64 печатных символа ASCII, включая пробел, [3] аналогично uuencode . Несмотря на то, что новая кодировка уже не носила шестнадцатеричный характер, устоявшееся название программы было сохранено. Меньшие файлы были несовместимы со старыми, поэтому расширение стало .hcx , c для компактного. Новая версия заменила предыдущие «в одночасье». [2]

БинХекс 4 (.hqx)

Лемперера беспокоили некоторые особенности BinHex, в частности, использование контрольной суммы вместо проверки циклическим избыточным кодом (CRC) и тот факт, что информация метаданных в заголовке была в виде обычного текста и, следовательно, могла быть повреждена так же, как и данные. [2]

Чтобы решить все эти проблемы, Лемперёр выпустил BinHex 4.0 в 1985 году, пропустив версию 3.0, чтобы избежать путаницы с давно умершей версией BASIC. Версия 4.0 сначала объединила ветвь данных, ветвь ресурса и метаданные файла в общий 8-битный формат, запустила кодирование длины серии (RLE) для результата, чтобы обеспечить некоторое сжатие, а затем выполнила преобразование 8->6 для результата и защитила его. все с несколькими CRC. Полученные .hqxфайлы были примерно того же размера, что и файлы .hcx's, но гораздо более надежными. [2]

БинХекс 5

Примерно в то время, когда был выпущен BinHex 4, большинство онлайн-сервисов начали поддерживать надежные 8-битные протоколы передачи файлов, такие как ZMODEM , и необходимость в защите ASCII отпала. Однако это создало проблему для Mac, поскольку по-прежнему существовала необходимость кодировать две вилки в одну.

Результатом командных усилий программистов связи Macintosh, включая Лемпера, стал MacBinary . Эти .binфайлы оставили содержимое вилок в исходном 8-битном формате и добавили простой заголовок для их объединения при приеме; Таким образом, файлы MacBinary были намного меньше, чем BinHex. Lempereur выпустил BinHex 5.0, почти идентичный версии 4.0, за исключением того, что он использовал MacBinary для объединения вилок перед запуском кодирования 8-6. Как он и ожидал, от этого не было никакой пользы. [2]

В Интернете электронная почта по-прежнему оставалась основным способом перемещения файлов. В то время относительно немногие люди имели полный доступ к Интернету, и такие службы, как FTPmail , были единственным способом, с помощью которого многие пользователи могли загружать файлы. Спустя годы, впервые попав в Интернет, Лемперёр с удивлением обнаружил, что BinHex 4.0 по-прежнему пользуется огромной популярностью. [2]

Того же результата можно было достичь, сначала используя MacBinary или AppleSingle для объединения вилок, а затем используя Uuencode или Base64 для полученного файла, но ни одно из этих решений так и не стало популярным, и BinHex 4.0 дожил до конца 1990-х годов. Файловые архивы классического программного обеспечения Mac OS по-прежнему заполнены файлами BinHexed.

Формат файла BinHex 4

Глядя на содержимое файла BinHex, можно заметить, что в первой строке обычно есть сообщение, идентифицирующее его как BinHex, за которым следует множество 64-символьных строк, состоящих из, казалось бы, случайных букв, цифр и знаков препинания. Вот пример того, как на самом деле выглядит BinHex:

(Этот файл необходимо преобразовать с помощью BinHex 4.0):$f*TEQKPH#jdCA0d,R0TG!"6594%8dP8)3#3"!&m!*!%EMA6593K!!%!!!&mFNaKG3,r!*!$&[rr$3d,BQPZD'9i,R4PFh3!RQ+!!"AV#J#3!i!!N!@QKUjrU!#3'[q3"&4&@&483N)f!3#Xaj6bV-H8mJ!!!B3!N!0"!*!$[3#3!cR@iiY)!*!'[I%4!!JFp$X%X3@J!mZE6!GRiKUi$HGKMf0U61S46%i1"AB!TI,fLl!d1X3RDDE8ALfTCbM8UP9p4iUqY-0k4krHpk9XK@`rbj2Ti'U@5rGH@+[fr-i4T6-qXpfl26,k!H5$NmlTikI'(l3GI4)f8mII&01CNEbC2LrNLBeaZ1HG@$G8!Z6"k)hh,q9p"r6FC*!!Se"(ic,Pd(4(b`pflKC`H1&JN5)GVX3mREDH55[l`%`Yhp%q092c`A(hPV)!83Dr&f4$$L#I1aM-"VjqV-q$34KQq6$M$f8#,Zc,i),!(`*ZN!$K$rS!LA%3cL+dYi"@,K(Z"`#3!фКи!!!:

Должна быть текстовая строка, которая используется пользователями и инструментами для распознавания версий BinHex: (This file must be converted with BinHex 4.0). Любой текст перед этой строкой игнорируется. [4]

Остальная часть файла состоит из трех частей: заголовка (содержащего имя файла, размер и т. д.), ветви данных (содержащей данные файла) и ветви ресурса . Каждый из них имеет двухбайтовую контрольную сумму CRC .

Все, кроме (This fileстроки ..., тогда рассматривается как область двоичных данных, закодированных символами ASCII. Алгоритм кодирования говорит, что три входных байта делятся на четыре 6-битных значения, аналогично тому, как это делает Base64 . Числам 0–63 присвоены символы согласно следующему списку.!"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr

При кодировании <return> следует вставлять после каждых 64 символов. После кодирования перед и после данных ставится двоеточие.

Рекомендации

  1. ^ abcd Манн.
  2. ^ abcdefg Лемперёр 1997.
  3. ^ Например, исходный код версии CWI, hexbinвключенной в macutils , в hecx.cстроке 187 использует выражение ((c)-0x20) & 0x3fдля получения числового значения цифры HCX со значением ASCII c.
  4. ^ Тип контента RFC  1741 MIME для файлов в кодировке BinHex. Фальтстрем П., Крокер Д. и Фэйр Э. (декабрь 1994 г.).

Библиография

Смотрите также

Внешние ссылки