Base91 是一种高效的二进制到文本编码方案,常用于压缩数据或生成短链接。编码数据,可正常通过其他方式解码
如果提示部分命令不存在或缺失,可添加精易模块。


源码查看
.版本 2
.子程序 Base91编码, 文本型, 公开
.参数 源数据, 字节集
.局部变量 长度, 整数型
.局部变量 输出文本, 文本型
.局部变量 Base91字符表, 文本型
.局部变量 i, 整数型
.局部变量 缓冲值, 整数型
.局部变量 位数, 整数型
.局部变量 v, 整数型
Base91字符表 = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~” + #引号
长度 = 取字节集长度 (源数据)
输出文本 = “”
连续赋值 (0, 缓冲值, 位数, i)
.判断循环首 (i < 长度)
缓冲值 = 位或 (缓冲值, 左移 (源数据 [i + 1], 位数))
位数 = 位数 + 8
.判断循环首 (位数 > 13 或 位数 = 13 且 位与 (缓冲值, 8191) > 88)
v = 位与 (缓冲值, 8191)
.判断开始 (v > 88)
缓冲值 = 右移 (缓冲值, 13)
位数 = 位数 - 13
.默认
v = 位与 (缓冲值, 16383)
缓冲值 = 右移 (缓冲值, 14)
位数 = 位数 - 14
.判断结束
输出文本 = 输出文本 + 取文本中间 (Base91字符表, v % 91 + 1, 1)
输出文本 = 输出文本 + 取文本中间 (Base91字符表, v ÷ 91 + 1, 1)
.判断循环尾 ()
i = i + 1
.判断循环尾 ()
.如果真 (位数 > 0)
输出文本 = 输出文本 + 取文本中间 (Base91字符表, 缓冲值 % 91 + 1, 1)
.如果真 (位数 > 7 或 缓冲值 > 90)
输出文本 = 输出文本 + 取文本中间 (Base91字符表, 缓冲值 ÷ 91 + 1, 1)
.如果真结束
.如果真结束
返回 (输出文本)
.版本 2
.子程序 Base91解码, 字节集, 公开
.参数 编码文本, 文本型
.局部变量 长度, 整数型
.局部变量 输出数据, 字节集
.局部变量 i, 整数型
.局部变量 b, 长整数型
.局部变量 n, 整数型
.局部变量 v, 整数型
.局部变量 字符值, 整数型
.局部变量 解码表, , , "128"
.局部变量 code, 整数型
编码文本 = 删全部空 (编码文本)
长度 = 取文本长度 (编码文本)
输出数据 = { }
连续赋值 (0, b, n)
v = -1
.计次循环首 (91, i)
解码表 [取代码 (取文本中间 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~” + #引号, i, 1), )] = i - 1
.计次循环尾 ()
.计次循环首 (长度, i)
code = 取代码 (编码文本, i)
.如果真 (code > -1) ' 过滤负值
字符值 = 解码表 [code] ' 寻找文本 (Base91字符表, 取文本中间 (编码文本, i, 1), , 假) - 1
.如果 (v = -1)
v = 字符值
.否则
v = v + 字符值 × 91
b = 位或 (b, 左移 (v, n))
.判断开始 (位与 (v, 8191) > 88)
n = n + 13
.默认
n = n + 14
.判断结束
.判断循环首 (n ≥ 8)
输出数据 = 输出数据 + 到字节集 (到字节 (位与 (b, 255)))
b = 右移 (b, 8)
n = n - 8
.判断循环尾 ()
v = -1
.如果结束
.如果真结束
.计次循环尾 ()
.判断开始 (v ≠ -1)
b = 位或 (b, 左移 (v, n))
n = n + 7
.判断循环首 (n ≥ 8)
输出数据 = 输出数据 + 到字节集 (到字节 (位与 (b, 255)))
b = 右移 (b, 8)
n = n - 8
.判断循环尾 ()
.默认
.判断结束
返回 (输出数据)
评论区