Как пользоваться
- Выберите Кодировать или Декодировать.
- Укажите, как читать байты: «Текст (UTF-8)» для обычного текста или «Hex» для двоичных данных, записанных шестнадцатеричными цифрами.
- Введите или вставьте данные и скопируйте результат.
Как это работает
basE91 держит очередь битов. Каждый входной байт добавляется в неё; когда накопилось больше 13 бит, кодировщик смотрит на младшие 13 бит:
- если их значение больше 88, берутся 13 бит;
- иначе берутся 14 бит (14-битное значение, у которого младшие 13 бит не больше 88, всё равно меньше 91 × 91 = 8281).
Порция v записывается двумя символами: v mod 91, затем v div 91. В конце оставшиеся биты дают ещё один или два символа. Декодер делает обратное: читает символы парами, восстанавливает v и по нему понимает, было в порции 13 или 14 бит.
Пример
Кодируем текст test (байты 74 65 73 74):
- первые два байта дают очередь 0x6574; её младшие 13 бит — 0x0574 = 1396, это больше 88, поэтому берутся 13 бит;
- 1396 mod 91 = 31 → f, 1396 div 91 = 15 → P;
- остальные байты обрабатываются так же, и получается fPNKd.
Hello, World! кодируется в >OwJh>}AQ;r@@Y?F. Русские буквы занимают в UTF-8 по 2 байта, поэтому кодируются примерно вдвое длиннее латиницы.
Советы
- В basE91 есть символ “ и другие знаки — в командной строке берите результат в одинарные кавычки, в JSON экранируйте.
- Ни выравнивания, ни контрольной суммы нет: обрезанная строка молча декодируется в меньшее число байтов.
- Для адресов и имён файлов лучше подходят Base64 в варианте для URL или Base58.