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 - достаточно большое число).