我一直在网上查找basE91的计算方法。我找到了this one之类的资源,它指定了用于特定值的字符,但我找不到如何获得该值。
我已经尝试将输入值更改为二进制并获取6位和7位的块但这些不起作用,我得到错误的输出。我不希望代码对我这样做,因为我自己编写代码,我只想知道将字符串编码为basE91所需的过程。
答案 0 :(得分:7)
首先,您需要将输入视为位流。
然后,从流中读取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是足够大的数字)。