9

我一直在网上寻找如何计算 baseE91。我找到了诸如此类的资源,指定了用于特定值的字符,但我没有找到如何获得该值的方法。

我尝试将输入值更改为二进制并获取 6 位和 7 位的块,但这些都不起作用,并且我得到了不正确的输出。我不想要为我做这件事的代码,因为我自己编写它,我只想知道将字符串编码为 baseE91 所需的过程。

4

1 回答 1

12

首先,您需要将输入视为比特流。

然后,从流中读取 13 位,并从中形成一个整数值。如果该整数的值小于等于88,则再多读一位,放入整数的第14位(最低位为第1位)。这个整数(我们称之为v)最大值是:8192+88 = 8280。

然后分成v两个索引:i0 = v%91, i1 = v/91. 然后使用一个 91 元素的字符表,输出两个字符:table[i0], table[i1].

(现在你可以看到88的原因:对于最大值(8280),两者都i0变成i190)

所以这个过程比base64更复杂,但更节省空间。此外,与 base64 不同,输出的大小有点依赖于输入字节。长度为 N 的 0x00 序列将比长度为 N 的 0xff 序列短(其中 N 是一个足够大的数字)。

于 2017-10-28T15:19:45.263 回答