Base91, как рассчитывается?

Я искал в Интернете, чтобы узнать, как рассчитывается basE91. Я нашел такие ресурсы, как этот, который определяет символы, используемые для определенного значения, но нигде не нашел, как получить это значение.

Я попытался изменить входные значения в двоичную и взять куски как 6, так и 7 бит, но они не работают, и я получаю неправильный вывод. Я не хочу код, который будет делать это для меня, как я, который должен написать это сам, я только хочу знать процесс, необходимый для кодирования строки в basE91.

1 ответ

Решение

Во-первых, вам нужно увидеть входные данные как поток битов.

Затем прочитайте 13 битов из потока и сформируйте из него целочисленное значение. Если значение этого целого числа меньше или равно 88, считайте один дополнительный бит и поместите его в 14-й бит (младший бит 1-й) целого числа. Это целое число (давайте назовем это v) максимальное значение: 8192+88 = 8280.

Затем разделить v на два показателя: i0 = v%91, i1 = v/91, Затем используйте таблицу символов из 91 элемента и выведите два символа: table[i0], table[i1],

(теперь вы можете увидеть причину 88: для максимального значения (8280) оба i0 а также i1 стать 90)

Таким образом, этот процесс сложнее, чем base64, но более компактен. Кроме того, в отличие от base64, размер вывода немного зависит от входных байтов. Последовательность N-длины 0x00 будет короче последовательности N-длины 0xff (где N - достаточно большое число).

Другие вопросы по тегам