Base91,是怎么计算出来的?
Base91, how is it calculated?
我一直在网上查找如何计算 basE91。我找到了诸如 this one 之类的资源,它指定了用于特定值的字符,但我没有找到如何获得该值的方法。
我曾尝试将输入值更改为二进制并采用 6 位和 7 位的块,但这些都不起作用,我得到的输出不正确。我不想要可以为我完成此操作的代码,因为我自己编写代码,我只想知道将字符串编码为 basE91 所需的过程。
首先,您需要将输入视为比特流。
然后,从流中读取13位,并从中形成一个整数值。如果这个整数的值小于等于88,则再读取一位,放入整数的第14位(最低位为1st)。这个整数(我们称之为v
)的最大值是:8192+88 = 8280.
然后将v
拆分为两个索引:i0 = v%91
、i1 = v/91
。然后用91个字符table,输出两个字符:table[i0]
,table[i1]
.
(现在可以看出88的原因了:对于最大值(8280),i0
和i1
都变成了90)
所以这个过程比 base64 更复杂,但更 space 高效。此外,与 base64 不同,输出的大小有点依赖于输入字节。 N 长度的 0x00 序列将比 N 长度的 0xff 序列短(其中 N 是一个足够大的数)。
我一直在网上查找如何计算 basE91。我找到了诸如 this one 之类的资源,它指定了用于特定值的字符,但我没有找到如何获得该值的方法。
我曾尝试将输入值更改为二进制并采用 6 位和 7 位的块,但这些都不起作用,我得到的输出不正确。我不想要可以为我完成此操作的代码,因为我自己编写代码,我只想知道将字符串编码为 basE91 所需的过程。
首先,您需要将输入视为比特流。
然后,从流中读取13位,并从中形成一个整数值。如果这个整数的值小于等于88,则再读取一位,放入整数的第14位(最低位为1st)。这个整数(我们称之为v
)的最大值是:8192+88 = 8280.
然后将v
拆分为两个索引:i0 = v%91
、i1 = v/91
。然后用91个字符table,输出两个字符:table[i0]
,table[i1]
.
(现在可以看出88的原因了:对于最大值(8280),i0
和i1
都变成了90)
所以这个过程比 base64 更复杂,但更 space 高效。此外,与 base64 不同,输出的大小有点依赖于输入字节。 N 长度的 0x00 序列将比 N 长度的 0xff 序列短(其中 N 是一个足够大的数)。