目 录CONTENT

文章目录

易语言 - Base91编解码源码

XxX
XxX
2025-11-06 / 0 评论 / 0 点赞 / 2 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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
    .判断循环尾 ()
.默认

.判断结束
返回 (输出数据)

0

评论区