自定义函数 JSA_A_ATOB 对base64编码的字符串进行解码

function JSA_A_ATOB(base64) { //base64解码
    base64 = base64.valueOf();
    const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    
    // 1. 预处理:移除非法字符并补足填充符
    let cleanInput = base64.replace(/[^A-Za-z0-9\+\/]/g, '');
    const padCount = (4 - (cleanInput.length % 4)) % 4;
    cleanInput = cleanInput.padEnd(cleanInput.length + padCount, '=');

    // 2. 构建字符索引映射表(加速查找)
    const charMap = {};
    for (let i = 0; i < base64Chars.length; i++) {
        charMap[base64Chars[i]] = i;
    }

    // 3. 解码核心逻辑(使用普通数组存储字节)
    const byteArray = [];
    for (let i = 0; i < cleanInput.length; i += 4) {
        // 3.1 获取4字符对应的6比特值
        const a = charMap[cleanInput[i]];
        const b = charMap[cleanInput[i + 1]];
        const c = charMap[cleanInput[i + 2]];
        const d = charMap[cleanInput[i + 3]];

        // 3.2 重组24比特数据
        const triple = (a << 18) | (b << 12) | (c << 6) | d;

        // 3.3 提取3字节(动态处理填充符)
        byteArray.push((triple >> 16) & 0xFF);
        if (cleanInput[i + 2] !== '=') byteArray.push((triple >> 8) & 0xFF);
        if (cleanInput[i + 3] !== '=') byteArray.push(triple & 0xFF);
    }

    // 4. 将字节数组转为字符串(兼容多字节字符)    Latin1编码(仅ASCII)
    return String.fromCharCode.apply(null, byteArray);
}

插入函数对话框、函数参数对话框:

加载宏文件function Workbook_Open(){}中添加以下代码。

Application.MacroOptions("JSA_A_ATOB", "对base64编码的字符串进行解码。", undefined, undefined, undefined, undefined, 14, undefined, undefined, undefined, ["base64字符串。"]);

云南省
浏览 17
收藏
点赞
分享
+1
1
+1
全部评论 1
 
497128657
关系图:https://bbs.wps.cn/topic/68275
· 云南省
回复